案例:编写一个应用程序,当按下鼠标左键时,在鼠标的光标位置会显示一个随机大小的矩形。如下图所示:
关键技术:
首先,定义一个用于存放矩形数据的数组m_Rectag,然后用库函数rand和对应的辅助计算产生描述矩形尺寸的CRect类型数据,并将数据存入数组中,最后在OnDraw()函数中显示该数组表示的矩形。
步骤:
1)用MFC AppWizard[exe]创建一个名称为Gun2的单文档应用程序框架。
2)打开FileView选项卡,点击Header Files/StdAdx.h,在StdAdx.h中添加包含命令:#include <afxtempl.h>,如下:
3)在视图类CGun2View.h的声明中,定义一个存放CRect类型元素的数组m_Rectag;
class CGun2View : public CView { // Operations public: CArray <CRect,CRect&> m_Rectag; .... }
4)在视图类CGun2View.cpp的构造函数中,定义m_Rectag数组的大小;
CGun2View::CGun2View() { // TODO: add construction code here m_Rectag.SetSize(256,256); }
5)在视图类的左键按下消息响应函数中,将每次单击鼠标产生的矩形数据存入数组;
void CGun2View::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default int r=rand()%50+5; CRect Ret(point.x-r,point.y-r,point.x+r,point.y+r); m_Rectag.Add(Ret); InvalidateRect(Ret,FALSE);//触发OnDraw函数 CView::OnLButtonDown(nFlags, point); }
6)在视图类的WM_PAINT消息响应函数中,重画数组中的矩形;
void CGun2View::OnDraw(CDC* pDC) { CGun2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here for(int i=0;i<m_Rectag.GetSize();i++) pDC->Rectangle(m_Rectag[i]); }