MFC绘图板(二)

来源:互联网 发布:阿里云机房测速 编辑:程序博客网 时间:2024/04/30 18:19

接上篇《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、待续... ...


0 0
原创粉丝点击