📄 collegewizardview.cpp
字号:
Clean(); //清空
break;
}
case ctShortestPath1:
{
//判断是否有景点或建筑被选中,如被选中则用vertex得到被选中目标
CVertex* vertex = g_pDoc->nuaaWizard.GetVertexList();
//pDoc->m_path = NULL;
while(vertex)
{//判断vertexpoint是否落在vertex内
if(vertex->IsLocatedIn(point))
break;
vertex = vertex->GetNext();
}
if(vertex)//有景点或建筑被选中,vertex了得到被选中目标
{
//用g_pDoc->m_selected1记录本选中的景点或建筑
g_pDoc->m_selected1 = vertex;
//设置命令标志
m_cmdType = ctShortestPath2;
//在状态栏显示提示信息
CMainFrame * pWnd = (CMainFrame *)AfxGetMainWnd();
pWnd->m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,625);
CString strInfo = "请您在屏幕上选择第二个景点或建筑:";
pWnd->m_wndStatusBar.SetPaneText(0,strInfo);
}
break;
}
case ctShortestPath2:
{
//判断是否有景点或建筑被选中,如被选中则用vertex得到被选中目标
CVertex* vertex = g_pDoc->nuaaWizard.GetVertexList();
// pDoc->m_path = NULL;
while(vertex)
{//判断vertexpoint是否落在vertex内
if(vertex->IsLocatedIn(point))
break;
vertex = vertex->GetNext();
}
if(vertex)//有景点或建筑被选中,vertex了得到被选中目标
{
//用g_pDoc->m_selected2记录本选中的景点或建筑
g_pDoc->m_selected2 = vertex;
//GetShortestPath()用来判断选定两景点或建筑间是否存在最短路径,
//存在则返回TRUE,并在图中一红线绘出最短路径,在状态栏显示该最短路径总长度
//否则返回FALSE
if(!g_pDoc->nuaaWizard.GetShortestPath(g_pDoc->m_selected1,g_pDoc->m_selected2))
AfxMessageBox("该两景点或建筑间不存在道路相通!");
Clean(); //清空
}
break;
}
case ctAllPaths1:
{
//判断是否有景点或建筑被选中,如被选中则用vertex得到被选中目标
CVertex* vertex = g_pDoc->nuaaWizard.GetVertexList();
//pDoc->m_path = NULL;
while(vertex)
{//判断vertexpoint是否落在vertex内
if(vertex->IsLocatedIn(point))
break;
vertex = vertex->GetNext();
}
if(vertex)//有景点或建筑被选中,vertex了得到被选中目标
{
//用g_pDoc->m_selected1记录本选中的景点或建筑
g_pDoc->m_selected1 = vertex;
//设置命令标志
m_cmdType = ctAllPaths2;
//在状态栏显示提示信息
CMainFrame * pWnd = (CMainFrame *)AfxGetMainWnd();
pWnd->m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,625);
CString strInfo = "请您在屏幕上选择第二个景点或建筑:";
pWnd->m_wndStatusBar.SetPaneText(0,strInfo);
}
break;
}
case ctAllPaths2:
{
//判断是否有景点或建筑被选中,如被选中则用vertex得到被选中目标
CVertex* vertex = g_pDoc->nuaaWizard.GetVertexList();
//pDoc->m_path = NULL;
while(vertex)
{//判断vertexpoint是否落在vertex内
if(vertex->IsLocatedIn(point))
break;
vertex = vertex->GetNext();
}
if(vertex)//有景点或建筑被选中,vertex了得到被选中目标
{
//用g_pDoc->m_selected2记录本选中的景点或建筑
g_pDoc->m_selected2 = vertex;
// if(!g_pDoc->nuaaWizard.GetAllPaths(g_pDoc->m_selected1,g_pDoc->m_selected2))
// AfxMessageBox("并不是所有景点或建筑间都存在道路相通!");
if(!g_pDoc->nuaaWizard.GetShortestPath(g_pDoc->m_selected1,g_pDoc->m_selected2))
AfxMessageBox("SORRY,该功能尚未完善!");
Clean(); //清空
}
break;
}
default:
{
Clean(); //清空
//判断是否有景点、建筑或道路被选中,
//如道路被选中则在图中用红线标出
g_pDoc->nuaaWizard.IsLocatedIn(point);
break;
}
}
CScrollView::OnLButtonDown(nFlags, point);
}
/////////////////////////////////////////////////////////////////////////////
//点击右键取消
void CCollegeWizardView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
Clean();//清空
//在状态栏显示提示信息
CMainFrame * pWnd = (CMainFrame *)AfxGetMainWnd();
pWnd->m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,625);
CString strInfo = "已取消!";
pWnd->m_wndStatusBar.SetPaneText(0,strInfo);
CScrollView::OnRButtonDown(nFlags, point);
}
/////////////////////////////////////////////////////////////////////////////
//插入一个新的景点或建筑
void CCollegeWizardView::OnEditInsertVertex()
{
// TODO: Add your command handler code here
Clean();
m_cmdType = ctInsertVertex;//设置命令标志
//在状态栏显示提示信息
CMainFrame * pWnd = (CMainFrame *)AfxGetMainWnd();
pWnd->m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,625);
CString strInfo = "请在屏幕上选择您要插入景点或建筑的位置:";
pWnd->m_wndStatusBar.SetPaneText(0,strInfo);
}
/////////////////////////////////////////////////////////////////////////////
//插入一条新的道路
void CCollegeWizardView::OnEditInsertPath()
{
// TODO: Add your command handler code here
Clean();
//设置命令标志
m_cmdType = ctInsertPath1;
//在状态栏显示提示信息
CMainFrame * pWnd = (CMainFrame *)AfxGetMainWnd();
pWnd->m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,625);
CString strInfo = "请在屏幕上选择您要插入道路的第一个端点(只能选择已经存在的景点或建筑):";
pWnd->m_wndStatusBar.SetPaneText(0,strInfo);
}
/////////////////////////////////////////////////////////////////////////////
//删除选中景点、建筑或道路
void CCollegeWizardView::OnEditDelete()
{
// TODO: Add your command handler code here
if(g_pDoc->m_selected1)
{
//调用CCollegeMap的删除景点或建筑函数DeleteVertex()
g_pDoc->nuaaWizard.DeleteVertex(g_pDoc->m_selected1);
Invalidate(true);
}
else if(!g_pDoc->m_selected1 && g_pDoc->m_path)
{
//调用CCollegeMap的删除道路的函数DeletePath()
g_pDoc->nuaaWizard.DeletePath(g_pDoc->m_path);
Invalidate(true);
}
else
{
//如果没有目标被选中
AfxMessageBox("请选择一个景点、建筑或道路!");
}
Clean();
}
/////////////////////////////////////////////////////////////////////////////
//更新选中景点、建筑或道路的信息
void CCollegeWizardView::OnEditUpdate()
{
// TODO: Add your command handler code here
if(g_pDoc->m_selected1)
{
//调用CVertex类的Update()更新选中景点或建筑的信息
g_pDoc->m_selected1->Update();
Invalidate(true);//刷新
}
else if(!g_pDoc->m_selected1 && g_pDoc->m_path)
{
//调用CPath类的Update()更新选中道路的信息
g_pDoc->m_path->Update();
Invalidate(true);//刷新
}
else
{
//如果没有目标被选中
AfxMessageBox("请选择一个景点、建筑或道路!");
}
Clean();
}
/////////////////////////////////////////////////////////////////////////////
//查看选中景点、建筑或道路的信息
void CCollegeWizardView::OnViewInformation()
{
// TODO: Add your command handler code here
if(g_pDoc->m_selected1)
//调用CVertex类的GetInformation()查看选中景点或建筑的信息
g_pDoc->nuaaWizard.GetInformation(g_pDoc->m_selected1);
else if(!g_pDoc->m_selected1 && g_pDoc->m_path)
//调用CPath类的GetInformation()查看选中道路的信息
g_pDoc->nuaaWizard.GetInformation(g_pDoc->m_path);
else
{
//如果没有目标被选中
AfxMessageBox("请选择一个景点、建筑或道路!");
}
Invalidate(true);
Clean();
}
/////////////////////////////////////////////////////////////////////////////
//查看选定两景点或建筑间所有道路
void CCollegeWizardView::OnViewAllpaths()
{
// TODO: Add your command handler code here
Invalidate(true);
Clean();//清空
//设置命令标志
m_cmdType = ctAllPaths1;
//在状态栏显示提示信息
CMainFrame * pWnd = (CMainFrame *)AfxGetMainWnd();
pWnd->m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,625);
CString strInfo = "请您在屏幕上选择一个景点或建筑:";
pWnd->m_wndStatusBar.SetPaneText(0,strInfo);
}
/////////////////////////////////////////////////////////////////////////////
//查看选定两景点或建筑间最短路径
void CCollegeWizardView::OnViewShortestpath()
{
// TODO: Add your command handler code here
Invalidate(true);
Clean();//清空
m_cmdType = ctShortestPath1;//设置命令标志
//在状态栏显示提示信息
CMainFrame * pWnd = (CMainFrame *)AfxGetMainWnd();
pWnd->m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,625);
CString strInfo = "请您在屏幕上选择一个景点或建筑:";
pWnd->m_wndStatusBar.SetPaneText(0,strInfo);
}
/////////////////////////////////////////////////////////////////////////////
//清空所有未完成命令及选中记录
void CCollegeWizardView::Clean()
{
if(g_pDoc->m_path)//清空选中记录g_pDoc->m_path
g_pDoc->m_path = NULL;
if(g_pDoc->m_selected1)//清空选中记录g_pDoc->m_selected1
g_pDoc->m_selected1 = NULL;
if(g_pDoc->m_selected2)//清空选中记录g_pDoc->m_selected2
g_pDoc->m_selected2 = NULL;
m_cmdType = ctUnknown;//清空所有未完成命令
}
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -