GIS程序设计(六)鼠标交互式绘图基础(简单实例)
之前实现了运行程序直接将OnDraw()函数中画的图形显示出来,现在进行鼠标交互式绘图的探索,先从简单的开始入手,只了解下鼠标交互绘图的步骤,以鼠标绘制简单直线为例,演示下鼠标事件的使用。本程序实现在静态窗口视图下,按下鼠标左键后不松开,移动鼠标绘图,松开鼠标左键完成直线绘制。
步骤:①选择鼠标绘制直线,开启绘制状态
②按下鼠标左键,记录起点坐标
③移动鼠标,获取终点坐标,调用绘图函数完成绘制
④松开鼠标左键,停用绘制状态
1、打开程序,在【CDrawView】类中添加成员变量。
在构造函数中初始化成员变量
2、添加菜单
进入【ResourceView】中的【Menu】目录,点击进入。双击菜单栏后空白处,弹出【菜单项目 属性】界面,勾除【弹出】,在【ID】栏输入ID号,在【标明】栏输入名称,并输入提示文字。回车确认
添加消息映射函数
进入代码区,右击鼠标,选择【建立类向导】进入选择刚才创建的ID,【Message】方式选择“Command”
为映射函数添加代码
3、添加鼠标事件函数
右击视图类,选择【Add Windows Message Handler】,为视图添加鼠标事件
为【按下鼠标左键添加代码】
为【鼠标移动添加代码】
为【松开鼠标左键添加代码】
添加绘图函数DrawShape(CDC *pDC, CPoint p1, CPoint p2)代码
①SetROP2(int nDrawMode)
主要用于设定当前前景色的混合模式。R2_NOT就是取反的意思,即前景色为背景色的反色,经常用R2_NOT来画橡皮线,因为两次取反可以还原背景色
②SelectStockObject
SelectStockObject只能把有限的几种对象选入设备环境,而SelectObject是可以把任意GDI对象选入设备环境
MSDN原文(部分)上面枚举出所有SelectStockObject能选入的对象,以下是原文
BLACK_BRUSH Black brush.
DKGRAY_BRUSH Dark gray brush.
GRAY_BRUSH Gray brush.
HOLLOW_BRUSH Hollow brush.
LTGRAY_BRUSH Light gray brush.
NULL_BRUSH Null brush.
WHITE_BRUSH White brush.
BLACK_PEN Black pen.
NULL_PEN Null pen.
WHITE_PEN White pen.
4、运行代码
本节只完成最简单的鼠标交互式绘图,当刷新视图后刚才绘制的图形就会消亡,因为没有将其储存,因此之后的学习会将绘制出的图储存入文档中。另外本次绘图直接使用最简单的MoveTo和LineTo函数,不符合C++面向对象概念,因此,建立合适的基类和图形类对象是鼠标交互式绘图的关键。可以关注后续的文章。
地理信息科学
Writed By NX
QQ:1051926720