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绘图的几种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CBP详解
- 下一篇: h.264视频文件封装