mfc画图板的设计采用vc++

mfc画图板的设计采用vc++

ID:10795074

大小:1.24 MB

页数:52页

时间:2018-07-08

mfc画图板的设计采用vc++_第1页
mfc画图板的设计采用vc++_第2页
mfc画图板的设计采用vc++_第3页
mfc画图板的设计采用vc++_第4页
mfc画图板的设计采用vc++_第5页
资源描述:

《mfc画图板的设计采用vc++》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.添加菜单项“绘图”如下图2.在绘图菜单项下继续添加菜单命令,如下图接着按下快捷键Ctrl+W;添加菜单项命令响应函数如下图按照上面标的顺序逐个添加函数接着在view类中添加个私有的成员变量,m_nDrawType来记录用户选择的菜单命令,如下图接着在view类的构造函数中对其初始化为0;之所以要添加这个参数,目的是当用户选择不同的操作时候,我们可以利用switch...case语句来选择进行用户的响应;所以接着要对不同的菜单命令设置不同的m_nDrawType;如下图所示分别设置;画线画矩形等,都需要记录鼠标的起始位置和终止位置,那么我们就需

2、要添加鼠标的位置变量,首先添加一个鼠标的起始位置变量在view类中,m_ptOrigin,这个变量是CPoint类型的数据。把他设置成私有成员;在view类构造函数中将其初始化为0;添加一个鼠标按下消息响应函数,如下图然后编写该消息响应函数,首先将鼠标左键按下时的初始坐标位置记录给m_ptOrigin变量;point是(鼠标的位置)然后绘图是在鼠标左键弹起时候绘图的,这个应该不难想明白的。所以按照添加鼠标左键按下响应函数的过程一样,添加一个鼠标左键弹起的消息响应函数,然后在里面编写绘图程序;第一步,获取DC第二步,利用switch。。。。Case

3、语句响应用户的菜单命令;首先编写点的绘图程序;然后编译运行一下,没问题,可以使用如下图下面编写绘制线条的程序暂时先不选择画笔,让它默认的来画线编译运行,没问题,如下图所示下面编写矩形的程序编译运行,如下,成功暂时不管这个画刷的透明与否;绘制椭圆程序编译运行之后可以下面绘制连续线条的编程绘制连续线条的思路是:首先获得鼠标的起始点,其次要绘制连续线条的话,那么鼠标移动过程中的每一个点都应该要记住的,这个可以利用鼠标移动的WM消息WM_MOUSEMOVE获取,然后在各点之间连接非常短的线就OK了。然后我们就可以添加一个该消息的响应函数OnMouseMo

4、ve(),在该函数中绘图就行了。过程如下图所示在里面编写程序但是有一个问题,就是我们希望在鼠标移动的过程中就绘图,那么就需要设置一个if语句来判断鼠标是否按下,如果按下就开始绘图,没有按下就不管了。所以在view类中添加一个BOOL型的私有变量,m_bDraw,当鼠标左键按下时候这个值设置为TRUE,否则为FALSE,初始化的时候给这个值初始化为FALSE;当鼠标左键弹起时候为FALSE;在voidCGraphicView::OnLButtonDown(UINTnFlags,CPointpoint)中即鼠标左键按下时给这个值赋值为TRUE;在鼠标

5、左键弹起时候给他赋值为FALSE;在voidCGraphicView::OnLButtonUp(UINTnFlags,CPointpoint)中赋值然后在voidCGraphicView::OnMouseMove(UINTnFlags,CPointpoint)函数中判断m_bDraw的值,来绘图1.获取客户区DC;2.创建一个宽度为1的红色实线画笔3.创建一个旧画笔,将新创建的画笔选入4.If语句判读,进行画图。。。。。。。。。。。。。。。。。。。注意,这块儿有个问题出现了,那就是,我们是要在鼠标移动过程中绘图,将每个点连接起来,那么每连接了两个

6、点之后,再画后面的线条的时候起始点就应该是上一次画线的终点才可以,所以需要在if语句中的画线程序的最后面添加改变起始点坐标。5.恢复画刷编译运行,如下图所示;连续线倒是可以画了,但是其他的功能都不正常了,比如说选择绘图里面的点,也是这样的结果,查找一下原因,就是,当鼠标移动的时候系统会自动调用OnMouseMove()这个函数,导致其他的功能都不正常了。然而我们是要让这个连续画线时才启用这个功能的,所以,我们可以有两种办法来解决这个问题,一个是加入if语句,判断一下m_nDrawType是否为5,一个是用witch。。。Case语句来做第一种办法

7、如下:编译运行如下图各功能都正常,可以用;下面是用witch。。。Case语句来做编译运行正常,可以用;接下来绘制扇形扇形的绘制,就是初始位置不变,连续画线到终点,那么很简单,只需要把连续画线里面的修改初始位置的那句程序删掉就可以了;程序也写在OnMouseMove()函数中;如下图所示编译运行,结果如下所示;下面来解决画刷的问题。因为之前没有设置画刷的,所以在画矩形、椭圆的时候,会出现覆盖的现象,所以现在我们在整个菜单项里面添加一个画刷菜单项,其中画刷的选择项有简单画刷、位图画刷、透明画刷。如下图所示先来创建他们,用CBrush类来创建画刷对象

8、先创建一个红色的画刷1.创建一个红色画刷对象2.获取设备描述表3.利用红色画刷填充所画矩形区域,利用FillRect()函数编译运行,如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。