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

📄 mainfrm.cpp

📁 曲线角点检测的二种算法
💻 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 + -