MFC繪圖CDC-創(chuàng)新互聯(lián)

文章目錄
  • CDC繪圖
    • DC(Device Context)設備描述表 \ 設備上下文 \ 或者設備環(huán)境
    • GDI(Graphics Device Interface)圖形設備接口
    • MFC常見設備描述表:CDC、CCientDC 、 CPaintDC、CMetaFileDC、CWindowDC
    • HDC GetDC(HWND hWnd) 、CDC *pDC=pWnd->GetDC()
    • ReleaseDC(pDC)
    • CDC::BitBlt()
    • CDC::GetOutputTextExtent()
    • CDC::StretchBlt()
    • CreateCompatibleBitmap() 創(chuàng)建兼容性視圖

專業(yè)從事網站設計制作、網站設計,高端網站制作設計,成都小程序開發(fā),網站推廣的成都做網站的公司。優(yōu)秀技術團隊竭力真誠服務,采用H5建站+CSS3前端渲染技術,響應式網站建設,讓網站在手機、平板、PC、微信下都能呈現。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。CDC繪圖 DC(Device Context)設備描述表 \ 設備上下文 \ 或者設備環(huán)境

設備描述表定義一組圖形對象及其屬性、影響輸出的圖形方式(數據)結構。

windows提供設備描述表,用于應用程序和物理設備之間進行交互,從而提供了應用程序設計的平臺無關性。

設備描述表是一種數據結構,它包括了一個設備(如顯示器和打印機)的繪制屬性相關的信息。所有的繪制操作通過設備描述表進行。應用程序不能直接訪問設備描述表,只能由各種相關API函數通過設備描述表的句柄間接訪問該結構。
屬性定義了GDI函數的工作細節(jié),在這里屬性確定了文字的顏色,x坐標和y坐標映射到窗口顯示區(qū)域的方式等。
包含GDI需要的所有關于顯示界面情況的描述字段,包括相連的物理設備和各種各樣的狀態(tài)信息。
定義了一系列圖形對象及其相關的屬性,以及會影響輸出結果的繪圖方式。這些圖形對象包括:畫筆(用于畫直線),筆刷(用于繪圖和填充),位圖(用于屏幕的拷貝或滾動),調色板(用于定義可用的顏色集),剪裁區(qū)(用于剪裁和其他操作),路徑(用于繪圖和畫圖操作)。設備環(huán)境函數用于對設備環(huán)境進行創(chuàng)建、刪除或獲取信息。

windows 窗口一旦創(chuàng)建,它就自動地產生了與之相對應的設備描述表數據結構,用戶可運用該結構,實現對窗口顯示區(qū)域的GDI操作,如劃線、寫文本、繪制位圖、填充等,并且所有這些操作均要通過設備描述表句柄了進行。

屏幕設備描述表:與顯示設備具有一定的對應關系,在windows GDI界面下,它總是相關與某個窗口或這窗口上的某個顯示區(qū)域。
窗口的設備描述表:一般指的是窗口的客戶區(qū),不包括標題欄、菜單欄所占有的區(qū)域,而對于整個窗口來說,其設備描述表嚴格意義上來講應該稱為窗口設備描述表,它包含窗口的全部顯示區(qū)域。

Windows 程序在屏幕、打印機或其它設備上畫圖時,它并不是將像素直接輸出到設備上,而是將圖繪制到由設備描述表表示的邏輯意義上的"顯示平面"上去。通過設備描述表調用顯示卡驅動,由顯示卡驅動程序訪問顯存實現繪圖輸出。
在Windows畫圖之前,Windows程序從GDI獲取設備描述表句柄HDC(HDC hDC=::GetDC(NULL)),并在每次調用完GDI輸出函數后將句柄返回給GDI。

GDI(Graphics Device Interface)圖形設備接口

負責系統(tǒng)與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。

在Windows操作系統(tǒng)下,絕大多數具備圖形界面的應用程序都離不開GDI,我們利用GDI所提供的眾多函數就可以方便的在屏幕、打印機及其它輸出設備上輸出圖形,文本等操作。GDI的出現使程序員無需要關心硬件設備及設備驅動,就可以將應用程序的輸出轉化為硬件設備上的輸出,實現程序開發(fā)者與硬件設備隔離,大大方便了開發(fā)工作。

在屏幕或者其它輸出設備上輸出圖形或者文字:1. 先獲得一個稱為設備描述表( DC:Device Context)的對象的句柄。 2. 以它為參數,調用各種GDI函數實現各種文字或圖形的輸出。

設備描述表句柄一旦獲得,那么系統(tǒng)將使用默認的屬性值填充設備描述表結構。

如果有必要,我們可以使用一些GDI函數獲取和改變設備描述表中的屬性值。

MFC常見設備描述表:CDC、CCientDC 、 CPaintDC、CMetaFileDC、CWindowDC

CDC:將Windows API封裝成一個類來操作。

CCientDC:代表窗口客戶區(qū)的設備描述表。其構造函數CClientDC(CWnd *pWin)通過::GetDC獲取指定窗口的客戶區(qū)的設備描述表HDC,并且使用成員函數Attach把它和CClientDC對象捆綁在一起;其析構函數使用成員函數Detach把設備描述表句柄HDC分離出來,并調用::ReleaseDC釋放設備描述表HDC。

CPaintDC:僅僅用于響應WM_PAINT消息時繪制窗口,因為它的構造函數調用了**::BeginPaint**獲取設備描述表HDC,并且使用成員函數Attach把它和CPaintDC對象捆綁在一起;析構函數使用成員函數Detach把設備描述表句柄HDC分離出來,并調用::EndPaint釋放設備描述表HDC,而::BeginPaint和::EndPaint僅僅在響應WM_PAINT時使用。

CMetaFileDC :用于生成元文件。

CWindowDC :代表**整個窗口區(qū)(包括非客戶區(qū))**的設備描述表。其構造函數CWindowDC(CWnd *pWin)通過::GetWindowDC獲取指定窗口的客戶區(qū)的設備描述表HDC,并使用Attach把它和CWindowDC對象捆綁在一起;其析構函數使用Detach把設備描述表HDC分離出來,調用::ReleaseDC釋放設備描述表HDC。

HDC GetDC(HWND hWnd) 、CDC *pDC=pWnd->GetDC()

取得hWnd窗口的設備描述表句柄,獲得DC的使用權,可以使用它的所有函數。當hWnd參數為NULL時,取得整個屏幕的設備描述表句柄。
HWND hWnd:要控制的窗口的句柄。
HDC hDC:DC的句柄。

ReleaseDC(pDC)

釋放設備描述表。

詳解DC、CDC、HDC、句柄、設備上下文

CDC::BitBlt()

將某一內存塊的數據傳送到另一內存塊,前一內存塊被稱為 "源 ",后一內存塊被稱為 "目標 "。圖象程序開發(fā)者使用Blit的函數在內存中將某頁面上的一幅位圖經過一定的變換轉移到另一個頁面上。

BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);

hDestDC目標設備環(huán)境的句柄
x目標設備環(huán)境的矩形區(qū)域的左上角的x坐標
y目標設備環(huán)境的矩形區(qū)域的左上角的y坐標
nWidth目標設備環(huán)境的矩形區(qū)域的寬度值
nHeight目標設備環(huán)境的矩形區(qū)域的高度值
hSrcDC源設備環(huán)境的句柄
xSrc源設備環(huán)境的矩形區(qū)域的左上角的x坐標
ySrc源設備環(huán)境的矩形區(qū)域的左上角的y坐標
dwRop光柵操作符 (Rop),它是指源位圖與目標位圖以及圖案刷的顏色值進行布爾運算的方式

常用的光柵操作碼及含義 :

  • BLACKNESS 用黑色填充目標矩形區(qū)域.
  • DSTINVERT 將目標矩形圖象進行反相.
  • MERGECOPY 將源矩形圖象與指定的圖案刷(Pattern)進行布爾 "與 "運算.
  • MERGEPAINT 將源矩形圖形經過反相后,與目標矩形圖象進行布爾 "或 "運算.
  • NOTSRCCOPY 將源矩形圖象經過反相后,復制到目標矩形上.
  • NOTSRCERASE 先將源矩形圖象與目標矩形圖象進行布爾 "或 "運算,然后再將得圖象進行反相.
  • PATCOPY 將指定的圖案刷復制到目標矩形上.
  • PATINVERT 將指定的圖案刷與目標矩形圖象進行布爾 "異或 "運算.
  • PATPAINT 先將源矩形圖象進行反相,與指定的圖案刷進行布爾 "或 "運算,再與目標矩形圖象進行布爾 "或 "運算SRCAND 將源矩形圖象與目標矩形圖象進行布爾 "與 "運算.
  • SRCCOPY 將源矩形圖象直接復制到目標矩形上.
  • SRCERASE 將目標矩形圖象進行反相,再與源矩形圖象進行布爾 "與 "運算.
  • SRCINVERT 將源矩形圖象與目標矩形圖象進行布爾 "異或 "運算.
  • SRCPAINT 將源矩形圖象與目標矩形圖象進行布爾 "或 "運算.
  • WHITENESS 用白色填充目標矩形區(qū)域.
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 指定光柵操作。

CreateCompatibleBitmap() 創(chuàng)建兼容性視圖
HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight);

創(chuàng)建與指定的設備環(huán)境相關的設備兼容的位圖。
hdc: 設備環(huán)境句柄。
nWidth:指定位圖的寬度,單位為像素。
nHeight:指定位圖的高度,單位為像素。

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

本文題目:MFC繪圖CDC-創(chuàng)新互聯(lián)
當前鏈接:http://muchs.cn/article22/djjijc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、品牌網站設計、小程序開發(fā)、網站收錄、手機網站建設、營銷型網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站優(yōu)化排名