注:这是参考网上相关的论坛内容综合加工而成,目的是在基于MFC的对话框中加入视图类并绘图。
实现方法:
1.建立一个基于对话框的MFC应用程序MyDlg.
2.在对话框中加入一个静态文本档IDC_DRAW,作为视图类的容器
3.在MyDlg中新建一个视图类CMyView派生自CView,在CMyDlgDlg.cpp中加入代码(在类定义的前面部分写就可以了)
#include "MyView.h"
CMyView *m_pview;
4.在对话框的初始化函数中加入以下代码
UINT ID = IDC_DRAW;
CWnd *pWnd = this->GetDlgItem(ID);
CRect Rect;
pWnd->GetWindowRect(Rect);
this->ScreenToClient(Rect);
m_pview = (CMyView*)RUNTIME_CLASS(CMyView)->CreateObject();
if (NULL==m_pview)
{
return FALSE;
}
m_pview->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, Rect, this, ID);
至此,创建完成,下面来进行测试,给视图里面画条曲线1 在视图类的OnDraw函数添加如下代码
void CMyView::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class
CDocument* pDoc = GetDocument();
// TODO: ÔÚ´Ë´¦Îª±¾»úÊý¾ÝÌí¼Ó»æÖÆ´úÂë
int data[20]={18,21,32,40,41,39,42,35,33,23,17,20,24,11,9,19,22,32,40,36};
CRect rc;
GetClientRect(rc);
rc.DeflateRect(50,50);
int gridXnums=10,gridYnums=8;
int dx=rc.Width()/gridXnums;
int dy=rc.Height()/gridYnums;
CRect gridRect(rc.left,rc.top,rc.left+dx*gridXnums,rc.top+dy*gridYnums);
CPen gridPen(0,0,RGB(0,100,200));
CPen *oldPen=pDC->SelectObject(&gridPen);
for(int i=0;i<=gridXnums;i++)
{
pDC->MoveTo(gridRect.left+i*dx,gridRect.bottom);
pDC->LineTo(gridRect.left+i*dx,gridRect.top);
}
for(i=0;i<=gridYnums;i++)
{
pDC->MoveTo(gridRect.left,gridRect.top+i*dy);
pDC->LineTo(gridRect.right,gridRect.top+i*dy);
}
pDC->SelectObject(oldPen);
gridPen.Detach();
gridPen.CreatePen(0,0,RGB(0,0,200));
pDC->SelectObject(&gridPen);
CBrush gridBrush(RGB(255,0,0));
CBrush* oldBrush=pDC->SelectObject(&gridBrush);
POINT ptRect[4]={{-3,-3},{-3,3},{3,3},{3,-3}},ptDraw[4];
int deta;
POINT pt[256];
int nCount=20;
deta=gridRect.Width()/nCount;
for(i=0;i<nCount;i++)
{
pt[i].x=gridRect.left+i*deta;
pt[i].y=gridRect.bottom-(int)(data[i]/60.0*gridRect.Height());
for(int j=0;j<4;j++)
{
ptDraw[j].x=ptRect[j].x+pt[i].x;
ptDraw[j].y=ptRect[j].y+pt[i].y;
}
pDC->Polygon(ptDraw,4);
}
pDC->Polyline(pt,nCount);
pDC->SelectObject(oldPen);
pDC->SelectObject(oldBrush);
}
2 结果如下图