7.7.3 地图放大、缩小的实现(2)
下面具体介绍地图放大、缩小的实现过程。创建一个工具栏,当然,由于在本系统中不需要应用到系统默认提供的工具栏,可以修改默认的工具栏。本系统电子地图上面的工具栏就是利用默认的工具栏来实现的。把鼠标指针放在工具栏的按钮上,把按钮从工具栏上拖走,这样可以将默认工具栏上的按钮删除。
关于工具栏上按钮的图标可以利用Visual C++(www.cppentry.com) 6.0来手动绘制自己想要的图标,也可以通过添加资源的方式,从外部添加自己喜欢的ICO格式的图标资源。双击工具栏上的空白按钮,为按钮设置ID。这里设置放大按钮的ID为ID_MAP_ZOOMIN,缩小按钮的ID为ID_MAP_ZOOMOUT,这些都设置完成后,通过类向导为工具栏上的按钮添加消息响应函数。由于本系统是将MapObjects控件放置在视图类中,故选择在视图类中为该控件添加系列消息响应函数。
注意:由于本系统采用分割视图的方式显示用户界面,也就是说,在程序中有两个视图,这样当程序运行后就会出现当激活另一个视图的时候工具栏上的按钮是灰色的。可以在主框架中响应消息,这样就避免了这个问题,当然同时会带来另外一个麻烦,那就是消息的传递。可以通过获取指针来解决这个问题,本系统是在视图类中实现消息响应的。
工具栏上放大按钮的消息响应函数代码如下:
代码位置:见光盘中本章源代码的CMapPublicView类。
- 1 void CMapPublicView::OnMapZoomin()
- 2 {
- 3 PlayResource(IDR_WAVE2); //播放声音
- 4 m_CurrentOperation=ZOOMIN; //当前操作类型
- 5 m_Map.SetMousePointer(51); //将鼠标设置放大图形
- 6 }
第3行代码实现当单击按钮时会出现声音,其中IDR_WAVE2是资源的ID,添加一个音频资源将ID设置为IDR_WAVE2。
第4行代码判断当前的操作为鼠标按下放大的按钮。
第5行代码调用CMap1的成员函数来设置光标的形状。
函数PlayResource()用于播放声音资源文件,当执行该操作的时候会出现提示声,变量m_CurrentOperation保存了当前用户的操作,函数SetMousePointer()将鼠标的形状设置成放大的图标。工具栏上缩小按钮的消息响应函数代码如下:
代码位置:见光盘中本章源代码的CMapPublicView类。
- 1 void CMapPublicView::OnMapZoomin()
- 2 {
- 3 PlayResource(IDR_WAVE2); //播放声音
- 4 m_CurrentOperation=ZOOMOUT; //当前操作类型
- 5 m_Map.SetMousePointer(52); //将鼠标设置缩小图形
- 6 }
- 第3
第3行代码实现当单击按钮时会出现声音,其中IDR_WAVE2是资源的ID,添加一个音频资源将ID设置为IDR_WAVE2。
第4行代码判断当前的操作为鼠标按下缩小的按钮。
第5行代码调用CMap1的成员函数来设置光标的形状。
为鼠标添加按下消息响应函数,这里需要注意的是,添加的消息并不是常用的WM_ MOUSEMOVE消息,而是为MapObjects控件添加鼠标按下消息,如图7-28所示。
|
| (点击查看大图)图7-28 添加类向导对话框 |