設(shè)備描述表定義一組圖形對(duì)象及其屬性、影響輸出的圖形方式(數(shù)據(jù))結(jié)構(gòu)。
windows提供設(shè)備描述表,用于應(yīng)用程序和物理設(shè)備之間進(jìn)行交互,從而提供了應(yīng)用程序設(shè)計(jì)的平臺(tái)無(wú)關(guān)性。
設(shè)備描述表是一種數(shù)據(jù)結(jié)構(gòu),它包括了一個(gè)設(shè)備(如顯示器和打印機(jī))的繪制屬性相關(guān)的信息。所有的繪制操作通過(guò)設(shè)備描述表進(jìn)行。應(yīng)用程序不能直接訪問(wèn)設(shè)備描述表,只能由各種相關(guān)API函數(shù)通過(guò)設(shè)備描述表的句柄間接訪問(wèn)該結(jié)構(gòu)。
屬性定義了GDI函數(shù)的工作細(xì)節(jié),在這里屬性確定了文字的顏色,x坐標(biāo)和y坐標(biāo)映射到窗口顯示區(qū)域的方式等。
包含GDI需要的所有關(guān)于顯示界面情況的描述字段,包括相連的物理設(shè)備和各種各樣的狀態(tài)信息。
定義了一系列圖形對(duì)象及其相關(guān)的屬性,以及會(huì)影響輸出結(jié)果的繪圖方式。這些圖形對(duì)象包括:畫(huà)筆(用于畫(huà)直線),筆刷(用于繪圖和填充),位圖(用于屏幕的拷貝或滾動(dòng)),調(diào)色板(用于定義可用的顏色集),剪裁區(qū)(用于剪裁和其他操作),路徑(用于繪圖和畫(huà)圖操作)。設(shè)備環(huán)境函數(shù)用于對(duì)設(shè)備環(huán)境進(jìn)行創(chuàng)建、刪除或獲取信息。
windows 窗口一旦創(chuàng)建,它就自動(dòng)地產(chǎn)生了與之相對(duì)應(yīng)的設(shè)備描述表數(shù)據(jù)結(jié)構(gòu),用戶可運(yùn)用該結(jié)構(gòu),實(shí)現(xiàn)對(duì)窗口顯示區(qū)域的GDI操作,如劃線、寫(xiě)文本、繪制位圖、填充等,并且所有這些操作均要通過(guò)設(shè)備描述表句柄了進(jìn)行。
屏幕設(shè)備描述表:與顯示設(shè)備具有一定的對(duì)應(yīng)關(guān)系,在windows GDI界面下,它總是相關(guān)與某個(gè)窗口或這窗口上的某個(gè)顯示區(qū)域。
窗口的設(shè)備描述表:一般指的是窗口的客戶區(qū),不包括標(biāo)題欄、菜單欄所占有的區(qū)域,而對(duì)于整個(gè)窗口來(lái)說(shuō),其設(shè)備描述表嚴(yán)格意義上來(lái)講應(yīng)該稱為窗口設(shè)備描述表,它包含窗口的全部顯示區(qū)域。
Windows 程序在屏幕、打印機(jī)或其它設(shè)備上畫(huà)圖時(shí),它并不是將像素直接輸出到設(shè)備上,而是將圖繪制到由設(shè)備描述表表示的邏輯意義上的"顯示平面"上去。通過(guò)設(shè)備描述表調(diào)用顯示卡驅(qū)動(dòng),由顯示卡驅(qū)動(dòng)程序訪問(wèn)顯存實(shí)現(xiàn)繪圖輸出。
在Windows畫(huà)圖之前,Windows程序從GDI獲取設(shè)備描述表句柄HDC(HDC hDC=::GetDC(NULL)
),并在每次調(diào)用完GDI輸出函數(shù)后將句柄返回給GDI。
負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。
在Windows操作系統(tǒng)下,絕大多數(shù)具備圖形界面的應(yīng)用程序都離不開(kāi)GDI,我們利用GDI所提供的眾多函數(shù)就可以方便的在屏幕、打印機(jī)及其它輸出設(shè)備上輸出圖形,文本等操作。GDI的出現(xiàn)使程序員無(wú)需要關(guān)心硬件設(shè)備及設(shè)備驅(qū)動(dòng),就可以將應(yīng)用程序的輸出轉(zhuǎn)化為硬件設(shè)備上的輸出,實(shí)現(xiàn)程序開(kāi)發(fā)者與硬件設(shè)備隔離,大大方便了開(kāi)發(fā)工作。
在屏幕或者其它輸出設(shè)備上輸出圖形或者文字:1. 先獲得一個(gè)稱為設(shè)備描述表( DC:Device Context)的對(duì)象的句柄。 2. 以它為參數(shù),調(diào)用各種GDI函數(shù)實(shí)現(xiàn)各種文字或圖形的輸出。
設(shè)備描述表句柄一旦獲得,那么系統(tǒng)將使用默認(rèn)的屬性值填充設(shè)備描述表結(jié)構(gòu)。
如果有必要,我們可以使用一些GDI函數(shù)獲取和改變?cè)O(shè)備描述表中的屬性值。
MFC常見(jiàn)設(shè)備描述表:CDC、CCientDC 、 CPaintDC、CMetaFileDC、CWindowDCCDC:將Windows API封裝成一個(gè)類來(lái)操作。
CCientDC:代表窗口客戶區(qū)的設(shè)備描述表。其構(gòu)造函數(shù)CClientDC(CWnd *pWin)通過(guò)::GetDC獲取指定窗口的客戶區(qū)的設(shè)備描述表HDC,并且使用成員函數(shù)Attach把它和CClientDC對(duì)象捆綁在一起;其析構(gòu)函數(shù)使用成員函數(shù)Detach把設(shè)備描述表句柄HDC分離出來(lái),并調(diào)用::ReleaseDC釋放設(shè)備描述表HDC。
CPaintDC:僅僅用于響應(yīng)WM_PAINT消息時(shí)繪制窗口,因?yàn)樗臉?gòu)造函數(shù)調(diào)用了**::BeginPaint**獲取設(shè)備描述表HDC,并且使用成員函數(shù)Attach把它和CPaintDC對(duì)象捆綁在一起;析構(gòu)函數(shù)使用成員函數(shù)Detach把設(shè)備描述表句柄HDC分離出來(lái),并調(diào)用::EndPaint釋放設(shè)備描述表HDC,而::BeginPaint和::EndPaint僅僅在響應(yīng)WM_PAINT時(shí)使用。
CMetaFileDC :用于生成元文件。
CWindowDC :代表**整個(gè)窗口區(qū)(包括非客戶區(qū))**的設(shè)備描述表。其構(gòu)造函數(shù)CWindowDC(CWnd *pWin)通過(guò)::GetWindowDC獲取指定窗口的客戶區(qū)的設(shè)備描述表HDC,并使用Attach把它和CWindowDC對(duì)象捆綁在一起;其析構(gòu)函數(shù)使用Detach把設(shè)備描述表HDC分離出來(lái),調(diào)用::ReleaseDC釋放設(shè)備描述表HDC。
HDC GetDC(HWND hWnd) 、CDC *pDC=pWnd->GetDC()取得hWnd窗口的設(shè)備描述表句柄,獲得DC的使用權(quán),可以使用它的所有函數(shù)。當(dāng)hWnd參數(shù)為NULL時(shí),取得整個(gè)屏幕的設(shè)備描述表句柄。
HWND hWnd:要控制的窗口的句柄。
HDC hDC:DC的句柄。
釋放設(shè)備描述表。
詳解DC、CDC、HDC、句柄、設(shè)備上下文
CDC::BitBlt()將某一內(nèi)存塊的數(shù)據(jù)傳送到另一內(nèi)存塊,前一內(nèi)存塊被稱為 "源 ",后一內(nèi)存塊被稱為 "目標(biāo) "。圖象程序開(kāi)發(fā)者使用Blit的函數(shù)在內(nèi)存中將某頁(yè)面上的一幅位圖經(jīng)過(guò)一定的變換轉(zhuǎn)移到另一個(gè)頁(yè)面上。
BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);
hDestDC | 目標(biāo)設(shè)備環(huán)境的句柄 |
x | 目標(biāo)設(shè)備環(huán)境的矩形區(qū)域的左上角的x坐標(biāo) |
y | 目標(biāo)設(shè)備環(huán)境的矩形區(qū)域的左上角的y坐標(biāo) |
nWidth | 目標(biāo)設(shè)備環(huán)境的矩形區(qū)域的寬度值 |
nHeight | 目標(biāo)設(shè)備環(huán)境的矩形區(qū)域的高度值 |
hSrcDC | 源設(shè)備環(huán)境的句柄 |
xSrc | 源設(shè)備環(huán)境的矩形區(qū)域的左上角的x坐標(biāo) |
ySrc | 源設(shè)備環(huán)境的矩形區(qū)域的左上角的y坐標(biāo) |
dwRop | 光柵操作符 (Rop),它是指源位圖與目標(biāo)位圖以及圖案刷的顏色值進(jìn)行布爾運(yùn)算的方式 |
常用的光柵操作碼及含義 :
void CMainDlg::DrawToolPhotoButton(CDC &dc)
{CDC memDC ;
memDC.CreateCompatibleDC ( &dc ) ;
CBitmap* pBitmap ; //load all bitmap
CBitmap* pOldBitmap ; //save old bitmap temp
//分配bitmap對(duì)象內(nèi)存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_GPS_B ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
//將圖片COPY到指定的像素位置
dc.BitBlt ( 111,111, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
//釋放bitmap對(duì)象內(nèi)存
delete pBitmap ;
}
CDC::BitBlt用法
CDC::GetOutputTextExtent()使用當(dāng)前字體計(jì)算輸出設(shè)備上下文中一行文本的寬度和高度以確定尺寸。
Microsoft CDC 類
CDC::StretchBlt()BOOL StretchBlt( int x, int y,int nWidth,int nHeight, CDC* pSrcDC, intxSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop)
返回值:如果位圖已經(jīng)繪制,則返回非零值,否則為0。
參數(shù): x 目標(biāo)矩形左上角的X邏輯坐標(biāo)。
y 目標(biāo)矩形左上角的Y邏輯坐標(biāo)。
nWidth 目標(biāo)矩形的寬度(邏輯單位)。
nHeight 目標(biāo)矩形的高度(邏輯單位)。
pSrcDC 指定源設(shè)備上下文。
xSrc 源矩形左上角的X邏輯坐標(biāo)。
ySrc 源矩形左上角的Y邏輯坐標(biāo)。
nSrcWidth 源矩形的寬度(邏輯單位)。
nSrcHeight 源矩形的高度(邏輯單位)。
dwRop 指定光柵操作。
HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight);
創(chuàng)建與指定的設(shè)備環(huán)境相關(guān)的設(shè)備兼容的位圖。
hdc: 設(shè)備環(huán)境句柄。
nWidth:指定位圖的寬度,單位為像素。
nHeight:指定位圖的高度,單位為像素。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧