📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "cpd.h"
#include "paDlg.h"
#include "pbDlg.h"
#include "wk.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_PAINT()
ON_COMMAND(ID_WK_PARAM, OnWkParam)
ON_COMMAND(ID_DETAIL_TXT, OnDetailTxt)
ON_WM_MOUSEMOVE()
ON_COMMAND(IDC_REFRESH, OnRefresh)
ON_MESSAGE(WM_UPDAATEPARAM,OnUpdateParam)
ON_WM_SIZE()
ON_COMMAND(ID_PT_BONE, OnPtBone)
ON_COMMAND(ID_PT_VECTOR, OnPtVector)
ON_COMMAND(ID_DATA_OPEN, OnDataOpen)
ON_COMMAND(ID_WK_ALG, OnWk)
ON_COMMAND(ID_WR_ALG, OnWr)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
m_pcore=NULL ;
m_padlg=NULL ;
m_pbdlg=NULL ;
bAlg=false ;
bShowParamDlg=false ;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// create a view to occupy the client area of the frame
m_padlg = new CpaDlg ;
m_padlg->Create(IDD_DIALOG_PARARM,this);
m_padlg->ShowWindow(false);
m_pbdlg = new CpbDlg ;
m_pbdlg->Create(IDD_DIALOG_PARARM_R,this);
m_pbdlg->ShowWindow(false);
GetMenu()->CheckMenuItem(ID_WK_ALG,MF_CHECKED);
ASSERT(IsWindow(m_hWnd));
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
void CMainFrame::OnPaint()
{
CPaintDC dc(this);
CDC * pDC= static_cast<CDC*>(&dc) ;
/*---------------------------------------------*/
if(!m_pcore)
return ;
m_pcore->drawmap(pDC) ;
/*---------------------------------------------*/
}
void CMainFrame::OnRefresh()
{
if(m_pcore)
m_pcore->bfirstdraw=true;
Invalidate(true);
}
void CMainFrame::OnWkParam()
{
if(!m_pcore)
return ;
bShowParamDlg=!bShowParamDlg;
CDialog * pmdlg ;
if(bAlg)
pmdlg=m_pbdlg ;
else
pmdlg=m_padlg ;
::AfxGetApp()->
GetMainWnd()->
GetMenu()->
CheckMenuItem(ID_WK_PARAM,bShowParamDlg?MF_CHECKED:MF_UNCHECKED);
pmdlg->ShowWindow(bShowParamDlg);
if(bShowParamDlg)
{
pmdlg->SetActiveWindow();
RECT r ;
pmdlg->GetWindowRect(&r) ;
::SetWindowPos(pmdlg->m_hWnd,
HWND_TOPMOST,
r.left,
r.top,
r.right-r.left,
r.bottom-r.top,
SWP_SHOWWINDOW);
}
}
void CMainFrame::OnPtBone()
{
if(!m_pcore)
return ;
m_pcore->b_pt_bone=!m_pcore->b_pt_bone ;
GetMenu()->CheckMenuItem(ID_PT_BONE,m_pcore->b_pt_bone?MF_CHECKED:MF_UNCHECKED);
}
void CMainFrame::OnPtVector()
{
if(!m_pcore)
return ;
m_pcore->b_pt_vector=!m_pcore->b_pt_vector ;
GetMenu()->CheckMenuItem(ID_PT_VECTOR,m_pcore->b_pt_vector?MF_CHECKED:MF_UNCHECKED);
}
void CMainFrame::OnUpdateParam(WPARAM wParam,LPARAM lParam)
{
if(!m_pcore)
return ;
m_pcore->startwk();
m_pcore->bfirstdraw=true;
Invalidate(true);
}
void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)
{
CFrameWnd::OnMouseMove(nFlags, point);
if(!m_pcore)
return ;
m_pcore->m_mpt.x=point.x;
m_pcore->m_mpt.y=point.y;
m_pcore->m_npt.x=point.x;
m_pcore->m_npt.y=point.y;
m_pcore->bgetpoint=m_pcore->gptinfo(m_pcore->m_npt,m_pcore->m_idx);
if(bShowParamDlg)
m_pcore->UpdataVl();
Invalidate(false);//must be false,or will be flash!
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
if(!m_pcore)
return ;
m_pcore->bfirstdraw=true;
Invalidate(true);
}
void CMainFrame::OnDetailTxt()
{
if(!m_pcore)
return ;
m_pcore->get_data("c:\\wk.txt");
UINT res=WinExec("NOTEPAD.EXE c:\\wk.txt",SW_SHOW);
switch(res)
{
case 0:
AfxMessageBox("The system is out of memory or resources.");
break;
case ERROR_BAD_FORMAT:
AfxMessageBox("The .exe file is invalid (non-Win32 .exe or error in .exe image).");
break;
case ERROR_FILE_NOT_FOUND:
AfxMessageBox("The specified file was not found.");
break;
case ERROR_PATH_NOT_FOUND:
AfxMessageBox("The specified path was not found.");
break;
}
}
static char BASED_CODE szFilter[] = "Chain-Code Files (*.dat)|*.dat|All Files (*.*)|*.*|";
void CMainFrame::OnDataOpen()
{
CFileDialog cfdlg(true,
NULL,
NULL,
NULL,
szFilter,
NULL
);
if(cfdlg.DoModal()!=IDOK)
return ;
CString cfilename ;
cfilename=cfdlg.GetFileName() ;
CString cpathname ;
cpathname=cfdlg.GetPathName() ;
if(m_pcore)
delete m_pcore ;
if(bAlg)
{
m_pcore=new CWR(m_pbdlg->m_hWnd);
m_pcore->setparam((LPCTSTR)cfilename ,
0.9,
0,
7,
8,
150,
5
);
}
else
{
m_pcore= new CWK(m_padlg->m_hWnd);
m_pcore->setparam(cfilename,
5.1,
0,
9,
9,
140.3,
9);
}
if(!m_pcore)
exit(0) ;
m_pcore->startwk();
m_pcore->UpdatePa();
m_pcore->bfirstdraw=true ;
Invalidate(true) ;
}
void CMainFrame::OnWr()
{
GetMenu()->CheckMenuItem(ID_WR_ALG,MF_CHECKED);
GetMenu()->CheckMenuItem(ID_WK_ALG,MF_UNCHECKED);
bAlg=true;
if(m_pcore)
{
char fname[256];
strcpy(fname,m_pcore->getfn());
delete m_pcore;
CWR *ptp=new CWR(m_pbdlg->m_hWnd);
ptp->setparam( fname,
0.9,
0,
7,
8,
150,
5 );
m_pcore=(CWBase*)ptp;
}
else
return ;
if(!m_pcore)
exit(0) ;
m_pcore->startwk();
m_pcore->UpdatePa();
m_pcore->bfirstdraw=true ;
m_padlg->ShowWindow(false);
m_pbdlg->ShowWindow(bShowParamDlg);
Invalidate(true) ;
}
void CMainFrame::OnWk()
{
GetMenu()->CheckMenuItem(ID_WK_ALG,MF_CHECKED);
GetMenu()->CheckMenuItem(ID_WR_ALG,MF_UNCHECKED);
bAlg=false;
if(m_pcore)
{
char fname[256];
strcpy(fname,m_pcore->getfn());
delete m_pcore;
CWK *ptp=new CWK(m_padlg->m_hWnd);
ptp->setparam( fname,
5.1,
0,
9,
9,
144.3,
9);
m_pcore=(CWBase*)ptp;
}
else
return ;
if(!m_pcore)
exit(0) ;
m_pcore->startwk();
m_pcore->UpdatePa();
m_pcore->bfirstdraw=true ;
m_pbdlg->ShowWindow(false);
m_padlg->ShowWindow(bShowParamDlg);
Invalidate(true) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -