精品文档
图5 添加菜单项
图6 设置菜单ID
菜单名 直线 矩形 椭圆 颜色 填充色 表1 对应菜单ID ID 菜单名 ID_LINE 线宽1 ID_RECT 线宽2 ID_ELLIPSE 线宽3 ID_COLOR 线宽4 ID_FILLCOLOR 线宽5 ID ID_W1 ID_W2 ID_W3 ID_W4 ID_W5 建立类向导,在视图类CLiYuJingView中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图7所示。
.
精品文档
图7 建立类向导
3) 创建工具栏
在插入处选择资源,新建工具栏,如图8所示;
图8 新建工具栏
在工具栏上添加相应的按钮,在属性处更改其ID,如图9所示。
.
精品文档
图9 编辑工具栏
4) 添加鼠标消息处理函数
添加鼠标消息处理函数OnLButtonDown()、OnMouseMove()、OnLButtonUp(),利用橡皮筋技术实时显示绘制图形,并绘制最终图形,具体源代码参看附录。添加过程为:选择View菜单下的ClassWizard菜单项打开类向导,在类列表中选择CLiYuJingView类,在消息列表框中选择WM_LBUTTONDOWN消息并用鼠标左键双击,此时类向导自动在成员函数列表框中添加该消息的处理函数。然后再用同样方法添加WM_MOUSEMOVE消息和WM_LBUTTONUP消息的处理函数,如图10所示。
图10 添加相应代码
.
精品文档
3.2 界面设计
各控件名称,类型,属性以及相关变量如表2所示。
表2 界面控件表
控件名称 绘图 直线 矩形 椭圆 线宽 颜色(线色) 控件类型 下拉式菜单 菜单项工具栏按钮 菜单项工具栏按钮 菜单项工具栏按钮 弹出式菜单 菜单项工具栏按钮 属性 无 ID_LINE ID_RECT ID_ELLIPSE 无 ID_COLOR 相关变量 无 int shape int shape int shape int w COLORREF m_nColor 填充色 菜单项工具栏按钮 ID_FILLCOLOR COLORREF m_fColor 整体界面如图11所示。
图11 整体界面显示
.
精品文档
3.3 关键功能的实现
1) 选择要绘制的图形
在直线、矩形以及椭圆的消息处理函数里为shape分别赋值为1,2,3,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:当选择画直线时,shape=1,则执行绘制直线代码,当选择画矩形时,shape =2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。
2) 改变线宽
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w, m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。选择菜单绘图→线宽选择划线宽度值,此时所选的线宽值就赋给线宽变量w。若不选择线宽值,则w=1(即默认线宽值为1)。
3) 改变线色
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w, m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。若不选择颜色,则默认(线)颜色为黑色。
4) 改变填充色
在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。若不选择颜色,则默认填充色为白色。
5) 橡皮筋技术实现鼠标实时绘图
利用橡皮筋技术可以实现在鼠标拖拽作图时,实时显示当前绘图的情况。这样,我们就要在鼠标移动的消息处理函数中添加相应的代码。在鼠标左键按下的时候,记录下图元起始点;在鼠标移动的时候,获取鼠标当前位置,绘制出新的图形,同时,将上一次绘制的图形擦除,这就是橡皮筋技术。在OnMouseMove()函数中调用SetROP2()函数将绘图模式设置为NOTXORPEN(同或)模式,使用同或模式绘图就可以画上真实的图形,并擦除上次绘制的图形。
.