VC+MapX 地图的放大,缩小,漫游,归心功能的实现

有了前面在主视图中如何创建地图,现在需要给地图加进一些简单的功能。

1、点击 “ResourceView”,点开“ToolBar”前面的加号后双击IDR_MAINFRAME,对工具栏资源进行编辑。我们用鼠标选中某按钮,然后按Del键擦除掉该按钮的像素,从位图编辑器的模板上选择椭圆和直线绘图工具绘制,以便产生如下形式的位图:

VC+MapX 地图的放大,缩小,漫游,归心功能的实现_第1张图片

再双击该按钮,为其分配ID:ID_MAP_ZOOMIN

2、利用类向导为C***View视图类加入消息控制函数。转到“查看”/“建立类向导”,在Objiect IDs消息框中选中“ID_MAP_ZOOMIN”,然后再Messages消息框中选中COMMAND,再单击“Add Fuction”,然后在Messages消息框中选中UPDATE_COMMAND_UI,再单击“Add Fuction”,最后点击“Edit Code”。

3、为void CMapXGoView::OnMapZoomin() 添加代码

try 
{
if(miZoomInTool==MapXObj.GetCurrentTool())
MapXObj.SetCurrentTool(miArrowTool);
else
{
MapXObj.SetCurrentTool(miZoomInTool);
MapXObj.SetMousewheelSupport(miFullMousewheelSupport);
}

catch (COleDispatchException *e) 
{
e->ReportError();
e->Delete();

catch (COleException *e)
{
e->ReportError();
e->Delete();
}

为void CMapXGoView::OnUpdateMapZoomin(CCmdUI* pCmdUI) 添加代码

BOOL bCheck;
if(miZoomInTool==MapXObj.GetCurrentTool())
bCheck=TRUE;
else
bCheck=FALSE;
pCmdUI->SetCheck(bCheck);

4、编译运行程序,即可实现地图的放大功能,放大后的地图如下图所示。

VC+MapX 地图的放大,缩小,漫游,归心功能的实现_第2张图片

5、同理,我们按照以上的步骤还可以实现地图的缩小,漫游,归心,箭头功能,提供代码如下

地图缩小

void CMapMarkView::OnMapZoomout() 
{
// TODO: Add your command handler code here
try 
{
if(miZoomOutTool==MapXObj.GetCurrentTool())
MapXObj.SetCurrentTool(miArrowTool);
else
{
MapXObj.SetCurrentTool(miZoomOutTool);


MapXObj.SetMousewheelSupport(miFullMousewheelSupport);
}

catch (COleDispatchException *e) 
{
e->ReportError();
e->Delete();

catch (COleException *e)
{
e->ReportError();
e->Delete();
}
}


void CMapMarkView::OnUpdateMapZoomout(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
BOOL bCheck;
if(miZoomOutTool==MapXObj.GetCurrentTool())
bCheck=TRUE;
else
bCheck=FALSE;
pCmdUI->SetCheck(bCheck);
}

地图漫游

void CMapMarkView::OnMapPan() 
{
// TODO: Add your command handler code here
try 
{
MapXObj.SetCurrentTool(miPanTool);

catch (COleDispatchException *e) 
{
e->ReportError();
e->Delete();

catch (COleException *e)
{
e->ReportError();
e->Delete();
}
}


void CMapMarkView::OnUpdateMapPan(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
BOOL bCheck;
if(miPanTool==MapXObj.GetCurrentTool())
bCheck=TRUE;
else
bCheck=FALSE;
pCmdUI->SetCheck(bCheck);
}

地图归心

void CMapMarkView::OnMapCenter() 
{
// TODO: Add your command handler code here
try
{
MapXObj.SetZoom(m_dInitZoom);
MapXObj.SetCenterX(m_dInitCenterX);
MapXObj.SetCenterY(m_dInitCenterY);

catch (COleDispatchException *e) 
{
e->ReportError();
e->Delete();

catch (COleException *e)
{
e->ReportError();
e->Delete();
}
}


void CMapMarkView::OnUpdateMapCenter(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
}

箭头

void CMapMarkView::OnMapArrow() 
{
// TODO: Add your command handler code here
try                                            
{
MapXObj.SetCurrentTool(miArrowTool);
MapXObj.SetMousePointer(miDefaultCursor);
MapXObj.SetMousewheelSupport(miNoMousewheelSupport);

catch (COleDispatchException *e)                 
{
e->ReportError();
e->Delete();

catch (COleException *e)                           
{
e->ReportError();
e->Delete();
}
}


void CMapMarkView::OnUpdateMapArrow(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
BOOL bCheck; 
if(miArrowTool == MapXObj.GetCurrentTool())
bCheck=TRUE;
else
bCheck=FALSE;


pCmdUI->SetCheck(bCheck);
}

你可能感兴趣的:(VC+MapX 地图的放大,缩小,漫游,归心功能的实现)