GIS程序设计(六)鼠标交互式绘图基础(简单实例)

时间:2024-05-22 15:36:53

GIS程序设计(六)鼠标交互式绘图基础(简单实例)

之前实现了运行程序直接将OnDraw()函数中画的图形显示出来,现在进行鼠标交互式绘图的探索,先从简单的开始入手,只了解下鼠标交互绘图的步骤,以鼠标绘制简单直线为例,演示下鼠标事件的使用。本程序实现在静态窗口视图下,按下鼠标左键后不松开,移动鼠标绘图,松开鼠标左键完成直线绘制。

步骤:①选择鼠标绘制直线,开启绘制状态

  ②按下鼠标左键,记录起点坐标

  ③移动鼠标,获取终点坐标,调用绘图函数完成绘制

  ④松开鼠标左键,停用绘制状态

   

1、打开程序,在【CDrawView】类中添加成员变量。

 GIS程序设计(六)鼠标交互式绘图基础(简单实例)

在构造函数中初始化成员变量

 GIS程序设计(六)鼠标交互式绘图基础(简单实例)

2、添加菜单

进入【ResourceView】中的【Menu】目录,点击进入。双击菜单栏后空白处,弹出【菜单项目 属性】界面,勾除【弹出】,在【ID】栏输入ID号,在【标明】栏输入名称,并输入提示文字。回车确认

 GIS程序设计(六)鼠标交互式绘图基础(简单实例)

添加消息映射函数

进入代码区,右击鼠标,选择【建立类向导】进入选择刚才创建的ID,【Message】方式选择“Command

 GIS程序设计(六)鼠标交互式绘图基础(简单实例)

为映射函数添加代码

 GIS程序设计(六)鼠标交互式绘图基础(简单实例)

3、添加鼠标事件函数

右击视图类,选择【Add Windows Message Handler】,为视图添加鼠标事件

 GIS程序设计(六)鼠标交互式绘图基础(简单实例)

GIS程序设计(六)鼠标交互式绘图基础(简单实例)

为【按下鼠标左键添加代码】

GIS程序设计(六)鼠标交互式绘图基础(简单实例)

为【鼠标移动添加代码】

GIS程序设计(六)鼠标交互式绘图基础(简单实例)

为【松开鼠标左键添加代码】

GIS程序设计(六)鼠标交互式绘图基础(简单实例)

添加绘图函数DrawShape(CDC *pDC, CPoint p1, CPoint p2)代码

GIS程序设计(六)鼠标交互式绘图基础(简单实例)

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、运行代码

 GIS程序设计(六)鼠标交互式绘图基础(简单实例)

本节只完成最简单的鼠标交互式绘图,当刷新视图后刚才绘制的图形就会消亡,因为没有将其储存,因此之后的学习会将绘制出的图储存入文档中。另外本次绘图直接使用最简单的MoveToLineTo函数,不符合C++面向对象概念,因此,建立合适的基类和图形类对象是鼠标交互式绘图的关键。可以关注后续的文章。

地理信息科学

Writed By NX

QQ:1051926720