您的位置:首页 > 编程语言 > C语言/C++

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

2014-04-11 17:04 387 查看
有了前面在主视图中如何创建地图,现在需要给地图加进一些简单的功能。

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



再双击该按钮,为其分配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、编译运行程序,即可实现地图的放大功能,放大后的地图如下图所示。



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
9771

if(miArrowTool == MapXObj.GetCurrentTool())
bCheck=TRUE;
else
bCheck=FALSE;

pCmdUI->SetCheck(bCheck);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  map mfc visual c++ 地图