MapGIS的绘图功能虽然在GIS软件中算是比较强大的,但便捷操作方面的不足还是让人用起来很不爽,你要放大图件还要点击放大镜按钮后才能实现,加个滚轮缩放不行啊?要拖动图件还得点击手形工具才能实现,直接用鼠标拖拽不行啊?好多制图人员估计都是边作图边骂软件开发人员不人性了。
其实要在二次开发中实现缩放等功能还是很简单的,不需要知道库函数,只知道快捷键就可以了,MapGIS中缩小的快捷键是F5,放大是F7,因此可以在鼠标滚轮事件中添加模拟键盘按键即可,直接设置鼠标放大缩小会影响图件的上下滚动,因此可以用Ctrl辅助一下,按住Ctrl并转动滚轮时实现图件缩放。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | BOOL CMyGisToolView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { int stt=GetKeyState(VK_CONTROL); //获得Ctrl键是否按下的状态 if (stt<0&&zDelta>=1) //判断滚轮向上还是向下,向上的话放大 { keybd_event(116,0,KEYEVENTF_EXTENDEDKEY,0); //F5的代码是116 } if (stt<0&&zDelta<=1) //向下的话缩小 { keybd_event(118,0,KEYEVENTF_EXTENDEDKEY,0); //F7的代码是118 } return CPrjEditView::OnMouseWheel(nFlags, zDelta, pt); } |
原理知道了,添加平移操作也就很简单了,只不过这里要调用_MoveWindow()函数:
1 2 3 4 5 6 7 8 9 | void CMyGisToolView::OnLButtonDown(UINT nFlags, CPoint point) { int stt=GetKeyState(VK_CONTROL); if (stt<0) { _MoveWindow(); } CPrjEditView::OnLButtonDown(nFlags, point); } |
同样的,为了使用方便可以添加双击事件,使得在双击图件的时候图像还原到初始大小:
1 2 3 4 5 6 7 8 9 | void CMyGisToolView::OnLButtonDblClk(UINT nFlags, CPoint point) { int stt1=GetKeyState(VK_CONTROL); if (stt1<0) { _RestoreWindow(); } CPrjEditView::OnLButtonDblClk(nFlags, point); } |
其他更多快捷功能的实现你可以自己摸索了,呵呵,原来二次开发也可以这么轻松~~
源码示例:下载
终于更新了,好久没看到了!
what’s this?
不熟,先关注下
MapGIS
没有用过!!!!!
不知道怎么样?
不错,二次开发,更加成熟。
MAPGIS 是干什么用的软件?
@蛋卷 呵呵 地理信息系统相关的软件,功能太多了,你搜一下能找到一大堆信息,目前我接触的只是做图和检查模块
我现在身边做了一群苦苦折腾GIS的师兄和师弟…
@飞晏 ❓ 我也加入苦苦折腾的行列了~~
他们有玩博客的吗?我去拜读一下文章,呵呵 应该能学到不少东西
@Pavel 貌似都没博客~~