2.6添加消息函数:
4在相应消息函数处添加代码,实现其功能
建立类向导,在视图类CyinshuyanView中,添加WM_PAINT消息,以及 WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码。
图8 添加WN_PAINT消息
添加代码如下:
25
图10 添加WN_BUTTONDOWN消息
26
图11 添加WN_MOSEMOVE消息
27
相应代码如下:
第3章 简易绘画板制作:
3.1设计目的和思路:
在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按
下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。对需要用到的变量进
28
行初始化。 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 选择图形或其它属性,可进行下一次绘制。 3.2选择要绘制的图形
在直线、矩形以及椭圆的消息处理函数里为shape分别赋值为1,2,3,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:当选择画直线时,shape=1,则执行绘制直线代码,当选择画矩形时,shape =2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。 3.3改变线宽
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w, m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。选择菜单绘图→线宽选择划线宽度值,此时所选的线宽值就赋给线宽变量w。若不选择线宽值,则w=1(即默认线宽值为1)。 3.4改变线色
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w, m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。若不选择颜色,则默认(线)颜色为黑色。 3.5改变填充色
在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。若不选择颜色,则默认填充色为黑色。 3.6绘制图形
鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;鼠标左键弹起时,此时绘图结束,鼠标弹起时所在位置就是画图的最终终点位置,画图结束后,刷新窗口,以便重新画图,此时执行的是OnLButtonUp()函数。
第4 章 结果及结论
4.1测试结果
1)点击链接,编译,运行后的窗口如图10所示。
2)改变绘制图形形状,颜色,线宽,填充色之后绘制的图形如图11所示。
29