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

📄 mainfrm.cpp

📁 师兄做的算法可视化演示程序
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "AlgorithmicDesign.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define	SAFE_CHECKWND(p)		if(NULL != p && ::IsWindow(p->GetSafeHwnd())) 
/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	pPackgreedyFrame=NULL;
	pMintreegreedyFrame=NULL;
	pPackDemarkFrame=NULL;
    pPackDynamicFrame=NULL;
	m_selectnumber=0;
	try
	{
		Create(NULL, "算法设计可视化演示", 
		WS_SYSMENU , rectDefault, NULL, NULL, NULL);
	}
	catch(...)
	{
		//::AfxMessageBox("无法创建主窗口", MB_OK | MB_ICONERROR);
	} 
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	this->ModifyStyleEx(WS_EX_OVERLAPPEDWINDOW , 0, 0);
	// create a view to occupy the client area of the frame
 
	/*if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
*
	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);*/

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
	cs.lpszClass = AfxRegisterWndClass(0);
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
	// forward focus to the view window
 
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
	// let the view have first crack at the command
 
	// otherwise, do default handling
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}


BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (NULL == m_wndSplitter.CreateStatic(this, 2, 1))
	     return FALSE;

	m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMainTreeView),
		CSize(350,100), pContext);

	m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CMainListView),
		CSize(250,500), pContext);

	p_MaintreeView	=(CMainTreeView*)m_wndSplitter.GetPane(0, 0);
	p_MainlistView	=(CMainListView*)m_wndSplitter.GetPane(1, 0);

	RECT	rect;
	memset(&rect, 0, sizeof(RECT));
	m_static.Create("",WS_VISIBLE,CRect(0,0,rect.right-rect.left,10),this,118);


	//return TRUE;
	return CFrameWnd::OnCreateClient(lpcs, pContext);
}

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CFrameWnd::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	HICON hicon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    SetIcon(hicon,TRUE);
	RECT	rect;
	memset(&rect, 0, sizeof(RECT));
	this->GetClientRect(&rect);
	int height=rect.bottom-rect.top;
    rect.top			=0;//ReBarHeight;
	rect.bottom=height/6;
	p_MaintreeView->MoveWindow(&rect, TRUE);
	rect.top=height/6+10;
	rect.bottom=rect.top+5*height/6;
	p_MainlistView->MoveWindow(&rect, TRUE);

	rect.top=height/6;
	rect.bottom=rect.top+10;
	rect.left=-10;
    m_static.MoveWindow(&rect, TRUE);

	//m_wndSplitter.ShowWindow(SW_HIDE);

	
}

void CMainFrame::ShowPackGreedyFrame(BOOL bShow, DWORD mnumber)
{
  if(mnumber!=-1)
	 m_selectnumber=mnumber;
  switch (m_selectnumber)
  {
	case 0:
	{
	   if(bShow)
	   {
		 if(NULL == pPackgreedyFrame)
		 {
		//	this->ShowWindow(SW_HIDE);
			if(NULL != pPackgreedyFrame || ::IsWindow(pPackgreedyFrame->GetSafeHwnd()))
			{
				return ;
			}
			
			const int	nReBarHeight	=0;
			RECT	rect;
			memset(&rect, 0, sizeof(RECT));
	  	   //	this->GetClientRect(&rect);
	 	   //	rect.top			=0;//nReBarHeight;
		    CClientDC dc(this);
	        int width=dc.GetDeviceCaps(HORZRES);
 	        int height=dc.GetDeviceCaps(VERTRES);
			rect.left=0;
			rect.top=0;
			rect.bottom=height;
			rect.right=width;
	           this->GetClientRect(&rect);
		    pPackgreedyFrame	=new CPackGreedyFrame(this, rect);
			SAFE_CHECKWND(pPackgreedyFrame)
			{
				pPackgreedyFrame->MoveWindow(&rect);
			}
		 }
	   	 SAFE_CHECKWND(pPackgreedyFrame)
		 {
			pPackgreedyFrame->ShowWindow(SW_SHOWMAXIMIZED);
		//	RECT	rect;
            //pPackgreedyFrame->GetClientRect(&rect);
			//rect.top=rect.top+50;
			//pPackgreedyFrame->MoveWindow(&rect);			 
		 }
		
	  }
 	 else
	 {
		SAFE_CHECKWND(pPackgreedyFrame)
		{
			pPackgreedyFrame->ShowWindow(SW_HIDE);
			pPackgreedyFrame->SendMessage(WM_DESTROY, 0, 0);
			delete pPackgreedyFrame;
			pPackgreedyFrame	=NULL;   
		}
		
		SAFE_CHECKWND(this)
		{
			this->ShowWindow(SW_SHOW);
		}
	 }
	  break;
	}
	case 1:
	{
	   if(bShow)
	   {
		 if(NULL == pMintreegreedyFrame)
		 {
		//	this->ShowWindow(SW_HIDE);
			if(NULL != pMintreegreedyFrame || ::IsWindow(pMintreegreedyFrame->GetSafeHwnd()))
			{
				return ;
			}
			
			const int	nReBarHeight	=0;
			RECT	rect;
			memset(&rect, 0, sizeof(RECT));
	  	   //	this->GetClientRect(&rect);
	 	   //	rect.top			=0;//nReBarHeight;
		    CClientDC dc(this);
	        int width=dc.GetDeviceCaps(HORZRES);
 	        int height=dc.GetDeviceCaps(VERTRES);
			rect.left=0;
			rect.top=0;
			rect.bottom=height;
			rect.right=width;
	           this->GetClientRect(&rect);
		    pMintreegreedyFrame	=new CMinspantreeGreedyFrame(this, rect);
			SAFE_CHECKWND(pMintreegreedyFrame)
			{
				pMintreegreedyFrame->MoveWindow(&rect);
			}
		 }
	   	 SAFE_CHECKWND(pMintreegreedyFrame)
		 {
			pMintreegreedyFrame->ShowWindow(SW_SHOWMAXIMIZED);
		//	RECT	rect;
            //pPackgreedyFrame->GetClientRect(&rect);
			//rect.top=rect.top+50;
			//pPackgreedyFrame->MoveWindow(&rect);			 
		 }
		
	   }
 	 else
	 {
		SAFE_CHECKWND(pMintreegreedyFrame)
		{
			pMintreegreedyFrame->ShowWindow(SW_HIDE);
			pMintreegreedyFrame->SendMessage(WM_DESTROY, 0, 0);
			delete pMintreegreedyFrame;
			pMintreegreedyFrame	=NULL;   
		}
		
		SAFE_CHECKWND(this)
		{
			this->ShowWindow(SW_SHOW);
		}
	 }
	 break;
	}
	case 2:
	{
	   if(bShow)
	   {
		 if(NULL == pPackDemarkFrame)
		 {
		//	this->ShowWindow(SW_HIDE);
			if(NULL != pPackDemarkFrame || ::IsWindow(pPackDemarkFrame->GetSafeHwnd()))
			{
				return ;
			}
			
			const int	nReBarHeight	=0;
			RECT	rect;
			memset(&rect, 0, sizeof(RECT));
	  	   //	this->GetClientRect(&rect);
	 	   //	rect.top			=0;//nReBarHeight;
		    CClientDC dc(this);
	        int width=dc.GetDeviceCaps(HORZRES);
 	        int height=dc.GetDeviceCaps(VERTRES);
			rect.left=0;
			rect.top=0;
			rect.bottom=height;
			rect.right=width;
	           this->GetClientRect(&rect);
		    pPackDemarkFrame	=new CPackDemarkFrame(this, rect);
			SAFE_CHECKWND(pPackDemarkFrame)
			{
				pPackDemarkFrame->MoveWindow(&rect);
			}
		 }
	   	 SAFE_CHECKWND(pPackDemarkFrame)
		 {
			pPackDemarkFrame->ShowWindow(SW_SHOWMAXIMIZED);
		//	RECT	rect;
            //pPackgreedyFrame->GetClientRect(&rect);
			//rect.top=rect.top+50;
			//pPackgreedyFrame->MoveWindow(&rect);			 
		 }
		
	   }
 	 else
	 {
		SAFE_CHECKWND(pPackDemarkFrame)
		{
			pPackDemarkFrame->ShowWindow(SW_HIDE);
			pPackDemarkFrame->SendMessage(WM_DESTROY, 0, 0);
			delete pPackDemarkFrame;
			pPackDemarkFrame	=NULL;   
		}
		
		SAFE_CHECKWND(this)
		{
			this->ShowWindow(SW_SHOW);
		}
	 }
	 break;
	}
	case 4:
		{
      	  if(bShow)
		  {
		    if(NULL == pPackDynamicFrame)
			{
		      //	this->ShowWindow(SW_HIDE);
			 if(NULL != pPackDynamicFrame || ::IsWindow(pPackDynamicFrame->GetSafeHwnd()))
			 {
				return ;
			 }
			
			const int	nReBarHeight	=0;
			RECT	rect;
			memset(&rect, 0, sizeof(RECT));
	  	   //	this->GetClientRect(&rect);
	 	   //	rect.top			=0;//nReBarHeight;
		    CClientDC dc(this);
	        int width=dc.GetDeviceCaps(HORZRES);
 	        int height=dc.GetDeviceCaps(VERTRES);
			rect.left=0;
			rect.top=0;
			rect.bottom=height;
			rect.right=width;
	           this->GetClientRect(&rect);
		    pPackDynamicFrame	=new CPackDynamicFrame(this, rect);
			SAFE_CHECKWND(pPackDynamicFrame)
			{
				pPackDynamicFrame->MoveWindow(&rect);
			}
		}
		SAFE_CHECKWND(pPackDynamicFrame)
		{
			pPackDynamicFrame->ShowWindow(SW_SHOWMAXIMIZED);
			 
		}
		
	}
	else
	{
		SAFE_CHECKWND(pPackDynamicFrame)
		{
			pPackDynamicFrame->ShowWindow(SW_HIDE);
			pPackDynamicFrame->SendMessage(WM_DESTROY, 0, 0);
			delete pPackDynamicFrame;
			pPackDynamicFrame	=NULL;   
		}
		
		SAFE_CHECKWND(this)
		{
			this->ShowWindow(SW_SHOW);
		}
	}
			break;
		}
	default:
    break;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -