VC|MFC的CDC類及如何使用畫筆繪制各種圖形(vc應用mfc畫圖的詳細步驟)

CDC對象提供處理顯示器或打印機等設備上下文的成員函數,以及處理與窗口客戶區對應的顯示上下文的成員。另外還為繪制文本、處理字體,使用打印機跳轉,滾動和播放元文件提供成員函數。

它還為獲取和設置繪圖屬性、映射,處理視點、窗口擴展、轉換坐標,處理區域、剪貼、繪制直線及繪制簡單橢圓和多邊形等形狀提供了成員函數。

可以通過CDC對象的成員函數進行所有的繪圖。

其對象層次結構如下:

VC|MFC的CDC類及如何使用畫筆繪制各種圖形(vc應用mfc畫圖的詳細步驟)

類名 說明
CPaintDC 窗口用戶區的設備描述環境,在OnDraw()函數中來處理WM_PAINT消息
CClientDC 窗口客戶區的設備描述環境,但應用在WM_PAINT消息之外的消息處理函數中
CWindowDC 在整個窗口內(不只是用戶區)繪圖的設備描述環境
CMetaFileDC 圖元文件的設備描述環境,在創建可以回放的圖像時使用

專門用于在應用程序窗口客戶區繪圖的CPaintDC,是所有CDC子類中最常用的一個類。為了防止程序設計人員誤把繪圖代碼寫到其他位置,MFC規定,CPaintDC對象只在CView類的OnDraw( )函數中有效。并且為了方便和引起程序員注意,MFC AppWizard在自動為用戶生成的CVeiw派生類代碼中就生成了如下框架代碼:

OnDraw(CDC *Pdc)

{……..}

其中,函數的參數pDC就是指向CPaintDC對象的指針。

系統每次創建應用程序窗口及窗口需要刷新時就會產生WM_PAINT消息,系統接收到這個消息就會自動調用OnDraw( )函數。應用程序也可以調用相關函數來激活OnDraw( ),所以程序中所有對窗口客戶區進行繪圖的代碼都應該寫在這個函數中。

CDC類有很多成員函數,包括繪制點、直線、矩形、橢圓、多邊形、文本以及位圖等的成員函數。

以下是一個小實例:

// Ch9Demo3View.cpp

void CCh9Demo3View::OnDraw(CDC* pDC)

{

CCh9Demo3Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CPen pen[5];

//創建實線畫筆

pen[0].CreatePen(PS_SOLID, 5, RGB(255, 0, 0));

//創建虛線畫筆

pen[1].CreatePen(PS_DASH, 1, RGB(0, 255, 0));

//創建點線畫筆

pen[2].CreatePen(PS_DOT, 1, RGB(0, 0, 255));

//創建點劃線畫筆

pen[3].CreatePen(PS_DASHDOT, 1, RGB(0, 255, 255));

// 創建雙點劃線畫筆

pen[4].CreatePen(PS_DASHDOTDOT, 1, RGB(255, 0, 255));

// 保存指向設備上下文原有畫筆的指針

CPen *pOldPen;

//以實線畫筆繪制矩形

pOldPen=pDC->SelectObject(&pen[0]);

pDC->Rectangle(10, 10, 110, 110);

pDC->TextOut(10, 115, \”Rectangle繪制矩形\”);

//使用虛線畫筆和函數Polyline輸出多段折線

pDC->SelectObject(&pen[1]);//載入畫筆

pDC->Rectangle(180, 10, 330, 110);//繪制矩形

CPoint pts[]={CPoint(190, 20), CPoint(200, 60), CPoint(270, 40), CPoint(210, 80),

CPoint(250, 100), CPoint(300, 30), CPoint(310, 80)};

pDC->Polyline(pts, 7);//繪制多端折線

pDC->TextOut(180, 115, \”Polyline繪制多段折線\”);

// 使用Pie和Arc輸出餅圖和弧形

pDC->SelectObject(&pen[2]);//載入點線畫筆

pDC->Ellipse(10, 140, 160, 240);

pDC->SelectObject(&pen[3]);//載入點劃線畫筆

pDC->Pie(20, 150, 150, 230, 160, 160, 10, 160);

pDC->SelectObject(&pen[4]);//載入雙點劃線畫筆

pDC->Arc(20, 150, 150, 230, 10, 220, 160, 220);

pDC->TextOut(10, 245, \”不同畫筆繪制橢圓、弧形和餅圖\”);

//恢復設備上下文的原有畫筆

pDC->SelectObject(pOldPen);

//刪除所創建的畫筆資源

for (int i=0; i<5; i )

pen[i].DeleteObject();

}

VC|MFC的CDC類及如何使用畫筆繪制各種圖形(vc應用mfc畫圖的詳細步驟)

繪制弧形需要4個坐標點,函數原型如下:

Arc(int x1,int x2, int x3, int x4, int x5, int x6, int x7, int x8)

4個坐標點如下圖所示:

VC|MFC的CDC類及如何使用畫筆繪制各種圖形(vc應用mfc畫圖的詳細步驟)

Pie()函數的參數與上述Arc()函數相同。

-End-

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2024年7月25日 下午6:13
下一篇 2024年7月25日 下午6:24

相關推薦

久久人人爽人人爽人人片av不| 精品无码国产自产在线观看水浒传| 亚洲自偷精品视频自拍| 国产精品jizzjizz| 交换年轻夫妇无删减| 三级毛片在线看| 欧美黑人粗硬大在线看| 中文字幕日韩精品在线| 国产经典一区二区三区蜜芽| 国产办公室gv西装男| 92午夜少妇极品福利无码电影| 欧美巨大bbbb动漫| 亚洲av成人综合网| 国语自产精品视频在线看| 亚洲福利电影一区二区?| 国产午夜精品1区2区3福利| 久久大香线蕉综合爱| 精品国精品国产自在久国产应用男| 亚洲国产精品ⅴa在线观看| 四虎成人精品国产永久免费无码 | 天天爽夜夜爽每晚高澡| 全免费a级毛片免费看| 女人与公拘交酡过程高清视频| 波多野结衣中文字幕一区二区三区 | 好紧好爽好大好深在快点视频| 噜噜噜噜噜在线观看视频| 中文字幕亚洲精品无码| 三级黄色在线看| 狠狠亚洲婷婷综合色香五月排名| 黄a大片av永久免费| 人人爽人人澡人人高潮| 92国产福利久久青青草原| 极品人妻少妇一区二区三区| 国产亚洲精品美女久久久| 精品国产成a人在线观看| 免费无码又爽又刺激高潮| 欧美日韩精品一区二区三区高清视频 | 一区二区三区四区精品| 欧美jizz18| 人妻18毛片a级毛片免费看| 欧美午夜精品久久久久久浪潮|