⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 collegewizardview.cpp

📁 这是我写的数据结构的课设
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				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 + -