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、待续... ...
- MFC绘图板(二)
- MFC绘图板(一)
- MFC绘图板(三)
- MFC 绘图板
- Swing绘图板(一)
- 绘图板
- 学习MFC(二)
- MFC相关(二)
- MFC(二)
- MFC笔记(二)
- MFC学习(二)
- 大二上课程设计作品(简单绘图板+桌面计算器+万年历)
- Windows Phone开发(21):做一个简单的绘图板
- Windows Phone开发(21):做一个简单的绘图板 .
- 绘图板 手写板
- Android绘图板
- MFC DLL向导(二)
- MFC DLL向导(二)
- HTML转义符号(比较全)
- 01背包问题
- 在macBook pro上安装myeclipse 2014 和破解过程
- 用java实现AES加解密算法
- 银行家算法——软考探究(四)
- MFC绘图板(二)
- POJ3230——Travel
- 对于没有显式初始化的变量的初始值可以做怎样的假定?
- Windows C++ 线程池
- 线段树
- Leetcode: Substring with Concatenation of All Words
- uml中的那些图
- HTTP协议详解
- /* ios */NSdictionary 的使用