設備描述表定義一組圖形對象及其屬性、影響輸出的圖形方式(數據)結構。
windows提供設備描述表,用于應用程序和物理設備之間進行交互,從而提供了應用程序設計的平臺無關性。
設備描述表是一種數據結構,它包括了一個設備(如顯示器和打印機)的繪制屬性相關的信息。所有的繪制操作通過設備描述表進行。應用程序不能直接訪問設備描述表,只能由各種相關API函數通過設備描述表的句柄間接訪問該結構。
屬性定義了GDI函數的工作細節,在這里屬性確定了文字的顏色,x坐標和y坐標映射到窗口顯示區域的方式等。
包含GDI需要的所有關于顯示界面情況的描述字段,包括相連的物理設備和各種各樣的狀態信息。
定義了一系列圖形對象及其相關的屬性,以及會影響輸出結果的繪圖方式。這些圖形對象包括:畫筆(用于畫直線),筆刷(用于繪圖和填充),位圖(用于屏幕的拷貝或滾動),調色板(用于定義可用的顏色集),剪裁區(用于剪裁和其他操作),路徑(用于繪圖和畫圖操作)。設備環境函數用于對設備環境進行創建、刪除或獲取信息。
windows 窗口一旦創建,它就自動地產生了與之相對應的設備描述表數據結構,用戶可運用該結構,實現對窗口顯示區域的GDI操作,如劃線、寫文本、繪制位圖、填充等,并且所有這些操作均要通過設備描述表句柄了進行。
屏幕設備描述表:與顯示設備具有一定的對應關系,在windows GDI界面下,它總是相關與某個窗口或這窗口上的某個顯示區域。
窗口的設備描述表:一般指的是窗口的客戶區,不包括標題欄、菜單欄所占有的區域,而對于整個窗口來說,其設備描述表嚴格意義上來講應該稱為窗口設備描述表,它包含窗口的全部顯示區域。
Windows 程序在屏幕、打印機或其它設備上畫圖時,它并不是將像素直接輸出到設備上,而是將圖繪制到由設備描述表表示的邏輯意義上的"顯示平面"上去。通過設備描述表調用顯示卡驅動,由顯示卡驅動程序訪問顯存實現繪圖輸出。
在Windows畫圖之前,Windows程序從GDI獲取設備描述表句柄HDC(HDC hDC=::GetDC(NULL)
),并在每次調用完GDI輸出函數后將句柄返回給GDI。
負責系統與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。
在Windows操作系統下,絕大多數具備圖形界面的應用程序都離不開GDI,我們利用GDI所提供的眾多函數就可以方便的在屏幕、打印機及其它輸出設備上輸出圖形,文本等操作。GDI的出現使程序員無需要關心硬件設備及設備驅動,就可以將應用程序的輸出轉化為硬件設備上的輸出,實現程序開發者與硬件設備隔離,大大方便了開發工作。
在屏幕或者其它輸出設備上輸出圖形或者文字:1. 先獲得一個稱為設備描述表( DC:Device Context)的對象的句柄。 2. 以它為參數,調用各種GDI函數實現各種文字或圖形的輸出。
設備描述表句柄一旦獲得,那么系統將使用默認的屬性值填充設備描述表結構。
如果有必要,我們可以使用一些GDI函數獲取和改變設備描述表中的屬性值。
MFC常見設備描述表:CDC、CCientDC 、 CPaintDC、CMetaFileDC、CWindowDCCDC:將Windows API封裝成一個類來操作。
CCientDC:代表窗口客戶區的設備描述表。其構造函數CClientDC(CWnd *pWin)通過::GetDC獲取指定窗口的客戶區的設備描述表HDC,并且使用成員函數Attach把它和CClientDC對象捆綁在一起;其析構函數使用成員函數Detach把設備描述表句柄HDC分離出來,并調用::ReleaseDC釋放設備描述表HDC。
CPaintDC:僅僅用于響應WM_PAINT消息時繪制窗口,因為它的構造函數調用了**::BeginPaint**獲取設備描述表HDC,并且使用成員函數Attach把它和CPaintDC對象捆綁在一起;析構函數使用成員函數Detach把設備描述表句柄HDC分離出來,并調用::EndPaint釋放設備描述表HDC,而::BeginPaint和::EndPaint僅僅在響應WM_PAINT時使用。
CMetaFileDC :用于生成元文件。
CWindowDC :代表**整個窗口區(包括非客戶區)**的設備描述表。其構造函數CWindowDC(CWnd *pWin)通過::GetWindowDC獲取指定窗口的客戶區的設備描述表HDC,并使用Attach把它和CWindowDC對象捆綁在一起;其析構函數使用Detach把設備描述表HDC分離出來,調用::ReleaseDC釋放設備描述表HDC。
HDC GetDC(HWND hWnd) 、CDC *pDC=pWnd->GetDC()取得hWnd窗口的設備描述表句柄,獲得DC的使用權,可以使用它的所有函數。當hWnd參數為NULL時,取得整個屏幕的設備描述表句柄。
HWND hWnd:要控制的窗口的句柄。
HDC hDC:DC的句柄。
釋放設備描述表。
詳解DC、CDC、HDC、句柄、設備上下文
CDC::BitBlt()將某一內存塊的數據傳送到另一內存塊,前一內存塊被稱為 "源 ",后一內存塊被稱為 "目標 "。圖象程序開發者使用Blit的函數在內存中將某頁面上的一幅位圖經過一定的變換轉移到另一個頁面上。
BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);
hDestDC | 目標設備環境的句柄 |
x | 目標設備環境的矩形區域的左上角的x坐標 |
y | 目標設備環境的矩形區域的左上角的y坐標 |
nWidth | 目標設備環境的矩形區域的寬度值 |
nHeight | 目標設備環境的矩形區域的高度值 |
hSrcDC | 源設備環境的句柄 |
xSrc | 源設備環境的矩形區域的左上角的x坐標 |
ySrc | 源設備環境的矩形區域的左上角的y坐標 |
dwRop | 光柵操作符 (Rop),它是指源位圖與目標位圖以及圖案刷的顏色值進行布爾運算的方式 |
常用的光柵操作碼及含義 :
void CMainDlg::DrawToolPhotoButton(CDC &dc)
{CDC memDC ;
memDC.CreateCompatibleDC ( &dc ) ;
CBitmap* pBitmap ; //load all bitmap
CBitmap* pOldBitmap ; //save old bitmap temp
//分配bitmap對象內存
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對象內存
delete pBitmap ;
}
CDC::BitBlt用法
CDC::GetOutputTextExtent()使用當前字體計算輸出設備上下文中一行文本的寬度和高度以確定尺寸。
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)
返回值:如果位圖已經繪制,則返回非零值,否則為0。
參數: x 目標矩形左上角的X邏輯坐標。
y 目標矩形左上角的Y邏輯坐標。
nWidth 目標矩形的寬度(邏輯單位)。
nHeight 目標矩形的高度(邏輯單位)。
pSrcDC 指定源設備上下文。
xSrc 源矩形左上角的X邏輯坐標。
ySrc 源矩形左上角的Y邏輯坐標。
nSrcWidth 源矩形的寬度(邏輯單位)。
nSrcHeight 源矩形的高度(邏輯單位)。
dwRop 指定光柵操作。
HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight);
創建與指定的設備環境相關的設備兼容的位圖。
hdc: 設備環境句柄。
nWidth:指定位圖的寬度,單位為像素。
nHeight:指定位圖的高度,單位為像素。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
本文題目:MFC繪圖CDC-創新互聯
當前鏈接:http://vcdvsql.cn/article22/djjijc.html
成都網站建設公司_創新互聯,為您提供虛擬主機、品牌網站設計、小程序開發、網站收錄、手機網站建設、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯