接上篇《MFC绘图板(一)》:http://blog.csdn.net/wwkaven/article/details/40657709
1、为使程序更美观,添加纸张效果:
(1)在CBottomFormView中添加一个成员变量:
UINT m_nPaperBorderSpace;
(2)初始值设为20:
(3)重写CBottomFormView类的OnDraw虚函数:
(4)在OnDraw函数中添加如下代码:
void CBottomFormView::OnDraw(CDC* pDC)
{// TODO: 在此添加专用代码和/或调用基类CRect rcBottomView;GetClientRect(&rcBottomView);pDC->FillRect(&rcBottomView, &CBrush(RGB(128, 138, 135)));CRect rcImage(rcBottomView);rcImage.left += m_nPaperBorderSpace;rcImage.top += m_nPaperBorderSpace;rcImage.right -= m_nPaperBorderSpace;rcImage.bottom -= m_nPaperBorderSpace;pDC->FillRect(&rcImage, &CBrush(RGB(255, 255, 255)));
}
(5)运行效果如下:
2、接下来就是绘图操作了,添加一个绘图类CDrawingGraphics:
3、类CDrawingGraphics用于绘制相应的图形。
4、下面来介绍一下绘图的实现过程,主要是通过响应鼠标左键的按下和弹起事件,获取两个点的坐标。然后再根据这两个点绘制直线、矩形或椭圆。下面是整个绘图过程(以绘制直线为例):
(1)定义两个成员变量,用于保存绘制直线所需的两个点的坐标;
(2)鼠标左键按下,保存此时的鼠标坐标,即为待绘制直线的起点;
(3)按下鼠标左键的同时移动鼠标至待绘制直线的终点;
(4)释放鼠标左键,同样保存此时的鼠标坐标,即为待绘制直线的终点;
(5)接下来,只要调用相应的绘图函数,就可以了。
5、上述方法有一个缺点,那就是只有在鼠标左键释放后才能确定直线位置,才能绘制相应的图形。而我们期望的是能够动态的绘制图形,即当鼠标移动时不断调整待绘制图形的样子,知道鼠标左键释放。以下是几个注意点:
(1)要实现上述功能,显然要相应鼠标移动的消息,但是如如果根据鼠标移动时的鼠标坐标不断绘制直线,那么效果会是下面这样:
(2)这样的效果显然是不行的,解决思路如下:在鼠标左键按下时保存绘图区域的图像,在每次相应鼠标移动消息函数时,先将保存的图像复制到绘图区域,接着在绘制直线,这样就只会产生一条直线了。
详见:http://blog.csdn.net/wwkaven/article/details/40590781
和 http://blog.csdn.net/wwkaven/article/details/40592023
6、待续... ...