对话框类调用视图类并绘图(基于MFC)

来源:互联网 发布:python游戏开发平台 编辑:程序博客网 时间:2024/06/10 10:33

注:这是参考网上相关的论坛内容综合加工而成,目的是在基于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 classCDocument* 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 结果如下图



0 0