【MapGIS二次开发】缩放平移等功能的快捷实现

  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);
}

  其他更多快捷功能的实现你可以自己摸索了,呵呵,原来二次开发也可以这么轻松~~

  源码示例:下载