随鼠标走的矩形

案例:编写一个应用程序,当按下鼠标左键时,在鼠标的光标位置会显示一个随机大小的矩形。如下图所示:

随鼠标走的矩形_第1张图片

关键技术:

      首先,定义一个用于存放矩形数据的数组m_Rectag,然后用库函数rand和对应的辅助计算产生描述矩形尺寸的CRect类型数据,并将数据存入数组中,最后在OnDraw()函数中显示该数组表示的矩形。

步骤:

1)用MFC AppWizard[exe]创建一个名称为Gun2的单文档应用程序框架。

2)打开FileView选项卡,点击Header Files/StdAdx.h,在StdAdx.h中添加包含命令:#include <afxtempl.h>,如下:

    随鼠标走的矩形_第2张图片

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]);
}




 


 

 

你可能感兴趣的:(windows,CArray)