日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC绘图的几种方法

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC绘图的几种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MFC繪圖的幾種方法

/*

1.可以使用OnDraw()函數直接繪圖;

?

2.使用菜單繪圖(添加菜單——添加菜單函數(消息映射函數))

3.自定義函數繪圖(添加成員函數——可以在OnDraw()函數調用,也可以在菜單函數里調用)

4.工具條設計(實現圖標和子菜單關聯)

?

*/

?

1.可以使用OnDraw()函數直接繪圖;

/
// CTestView drawing
?
void CTestView::OnDraw(CDC* pDC)
{
?? ?CTestDoc* pDoc = GetDocument();
?? ?ASSERT_VALID(pDoc);
?? ?// TODO: add draw code for native data here
?
?? ?CRect rect;
?? ?GetClientRect(&rect);
?? ?pDC->SetMapMode(MM_ANISOTROPIC);
?? ?pDC->SetWindowExt(rect.Width(),rect.Height());
?? ?pDC->SetViewportExt(rect.Width(),-rect.Height());
?? ?pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);
?? ?rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);
?? ?CPoint ld,rt;//
?
?? ?//繪制外部黑色橢圓
?? ?ld=CPoint(-200,-150),rt=CPoint(200,150);
?? ?CBrush NewBrush, *pOldBrush;
?? ?NewBrush.CreateSolidBrush(RGB(0,0,0));
?? ?pOldBrush=pDC->SelectObject(&NewBrush);
?? ?pDC->Ellipse(CRect(ld,rt));
?? ?pDC->SelectObject(pOldBrush);
?? ?NewBrush.DeleteObject();
?
? ? //繪制白色外部圓
?? ?ld=CPoint(-147,-147),rt=CPoint(147,147);
?? ?pDC->Ellipse(CRect(ld,rt));
?
?? ?//繪制內部黑色橢圓
?? ?ld=CPoint(-140,-90),rt=CPoint(140,90);
?? ?NewBrush.CreateSolidBrush(RGB(0,0,0));
?? ?pOldBrush=pDC->SelectObject(&NewBrush);
?? ?pDC->Ellipse(CRect(ld,rt));
?? ?pDC->SelectObject(pOldBrush);
?? ?NewBrush.DeleteObject();
?
?? ?//繪制白色內部圓
?? ?ld=CPoint(-88,-88),rt=CPoint(88,88);
?? ?pDC->Ellipse(CRect(ld,rt));
?? ?
?
}

2.使用菜單繪圖(添加菜單——添加菜單函數(消息映射函數))

?

void CTestView::OnMdraw()?
{
?? ?// TODO: Add your command handler code here
?? ?CDC * pDC=GetDC();//初始化指針pDC
?? ?
?? ?/*添加上一種方法的代碼*/
?
?? ?ReleaseDC(pDC);//釋放指針
?? ?
}
3.自定義函數繪圖

?

void CTestView::DrawObject(CDC *pDC)
{
?? ?CRect rect;
?? ?GetClientRect(&rect);
?? ?pDC->SetMapMode(MM_ANISOTROPIC);
?? ?pDC->SetWindowExt(rect.Width(),rect.Height());
?? ?pDC->SetViewportExt(rect.Width(),-rect.Height());
?? ?pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);
?? ?rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);
?? ?CPoint ld,rt;//
?
?? ?//繪制外部黑色橢圓
?? ?ld=CPoint(-200,-150),rt=CPoint(200,150);
?? ?CBrush NewBrush, *pOldBrush;
?? ?NewBrush.CreateSolidBrush(RGB(0,0,0));
?? ?pOldBrush=pDC->SelectObject(&NewBrush);
?? ?pDC->Ellipse(CRect(ld,rt));
?? ?pDC->SelectObject(pOldBrush);
?? ?NewBrush.DeleteObject();
?
? ? //繪制白色外部圓
?? ?ld=CPoint(-147,-147),rt=CPoint(147,147);
?? ?pDC->Ellipse(CRect(ld,rt));
?
?? ?//繪制內部黑色橢圓
?? ?ld=CPoint(-140,-90),rt=CPoint(140,90);
?? ?NewBrush.CreateSolidBrush(RGB(0,0,0));
?? ?pOldBrush=pDC->SelectObject(&NewBrush);
?? ?pDC->Ellipse(CRect(ld,rt));
?? ?pDC->SelectObject(pOldBrush);
?? ?NewBrush.DeleteObject();
?
?? ?//繪制白色內部圓
?? ?ld=CPoint(-88,-88),rt=CPoint(88,88);
?? ?pDC->Ellipse(CRect(ld,rt));
?
}
兩種方式調用

(1)在OnDraw()函數里面調用

// CTestView drawing
?
void CTestView::OnDraw(CDC* pDC)
{
?? ?CTestDoc* pDoc = GetDocument();
?? ?ASSERT_VALID(pDoc);
?? ?// TODO: add draw code for native data here
?
?? ??? ?DrawObject(pDC);
?
}
(2)在菜單函數里面調用

// CTestView message handlers
?
void CTestView::OnMdraw()?
{
?? ?// TODO: Add your command handler code here
?? ?CDC * pDC=GetDC();//初始化指針pDC
?? ?
?? ?DrawObject(pDC);
?
?? ?ReleaseDC(pDC);//釋放指針
?? ?
}
?

4.工具條設計(實現圖標和子菜單關聯)

?

5、運行結果

?

原文:https://blog.csdn.net/lanyandong/article/details/80290691?
?

總結

以上是生活随笔為你收集整理的MFC绘图的几种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。