// paDlg.cpp : implementation file
//
#include "stdafx.h"
#include "cpd.h"
#include "paDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CpaDlg dialog
inline CpaDlg::Enable4Button(bool b)
{
GetDlgItem(IDC_VALUE_PLUS)->EnableWindow(b);
GetDlgItem(IDC_VALUE_DEC)->EnableWindow(b) ;
GetDlgItem(IDC_VALUE_PLUSPLUS)->EnableWindow(b);
GetDlgItem(IDC_VALUE_DECDEC)->EnableWindow(b) ;
}
CpaDlg::CpaDlg(CWnd* pParent /*=NULL*/)
: CDialog(CpaDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CpaDlg)
m_fn = _T("");
m_k = 0.0;
m_lc = 0.0;
m_lpi = 0.0;
m_w_6 = 0.0;
m_ac = 0.0;
m_w_u = 0.0;
//}}AFX_DATA_INIT
pActive= NULL;
m_pcwk=NULL ;
}
BOOL CpaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
Enable4Button(false);
GetDlgItem(IDC_VALUE_DEC)->EnableWindow(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CpaDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CpaDlg)
DDX_Control(pDX, IDC_EDIT_WEIGTED_6, m_w_6_ctrl);
DDX_Control(pDX, IDC_EDIT_W_U, m_w_u_ctrl);
DDX_Control(pDX, IDC_EDIT_LEN_PI, m_lpi_ctrl);
DDX_Control(pDX, IDC_EDIT_LEN_COMPARE, m_lc_ctrl);
DDX_Control(pDX, IDC_EDIT_K, m_k_ctrl);
DDX_Control(pDX, IDC_EDIT_EALPA, m_ac_ctrl);
DDX_Text(pDX, IDC_EDIT_FN, m_fn);
DDX_Text(pDX, IDC_EDIT_K, m_k);
DDX_Text(pDX, IDC_EDIT_LEN_COMPARE, m_lc);
DDX_Text(pDX, IDC_EDIT_LEN_PI, m_lpi);
DDX_Text(pDX, IDC_EDIT_WEIGTED_6, m_w_6);
DDX_Text(pDX, IDC_EDIT_EALPA, m_ac);
DDX_Text(pDX, IDC_EDIT_W_U, m_w_u);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CpaDlg, CDialog)
//{{AFX_MSG_MAP(CpaDlg)
ON_EN_SETFOCUS(IDC_EDIT_K, OnSetfocusEditK)
ON_EN_SETFOCUS(IDC_EDIT_EALPA, OnSetfocusEditEalpa)
ON_EN_SETFOCUS(IDC_EDIT_LEN_COMPARE, OnSetfocusEditLenCompare)
ON_EN_SETFOCUS(IDC_EDIT_LEN_PI, OnSetfocusEditLenPi)
ON_EN_SETFOCUS(IDC_EDIT_WEIGTED_6, OnSetfocusEditWeigted6)
ON_EN_KILLFOCUS(IDC_EDIT_WEIGTED_6, OnKillfocusEditWeigted6)
ON_EN_KILLFOCUS(IDC_EDIT_K, OnKillfocusEditK)
ON_EN_KILLFOCUS(IDC_EDIT_EALPA, OnKillfocusEditEalpa)
ON_EN_KILLFOCUS(IDC_EDIT_LEN_COMPARE, OnKillfocusEditLenCompare)
ON_EN_KILLFOCUS(IDC_EDIT_LEN_PI, OnKillfocusEditLenPi)
ON_EN_SETFOCUS(IDC_EDIT_W_U, OnSetfocusEditWU)
ON_WM_MOVE()
ON_EN_CHANGE(IDC_EDIT_WEIGTED_6, OnChangeEditWeigted6)
ON_EN_CHANGE(IDC_EDIT_W_U, OnChangeEditWU)
ON_BN_CLICKED(IDC_VALUE_PLUS, OnValuePlus)
ON_BN_CLICKED(IDC_VALUE_DEC, OnValueDec)
ON_BN_CLICKED(IDC_VALUE_DECDEC, OnValueDecdec)
ON_BN_CLICKED(IDC_VALUE_PLUSPLUS, OnValuePlusplus)
ON_EN_SETFOCUS(IDC_EDIT_FN, OnSetfocusEditFn)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_PARAMPLUS,OnValuePlus)
ON_MESSAGE(WM_PARAMDEC,OnValueDec)
ON_MESSAGE(WM_UPDATAS,Onupdateparam)
ON_MESSAGE(WM_UPVALUES,Onupdatevl)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CparamDlg message handlers
void CpaDlg::PostNcDestroy()
{
delete this ;
CDialog::PostNcDestroy();
}
void CpaDlg::OnCancel()
{
::SendMessage(((CFrameWnd*)::AfxGetApp()
->GetMainWnd())
->m_hWnd,
WM_COMMAND,
ID_WK_PARAM,0) ;
::SendMessage(((CFrameWnd*)::AfxGetApp()
->GetMainWnd())
->m_hWnd,
WM_COMMAND,
IDC_REFRESH ,0) ;
// CDialog::OnCancel();
}
void CpaDlg::Onupdateparam(WPARAM wParam,LPARAM lParam)
{
m_pcwk=(CWK *)(wParam) ; //
if(m_pcwk)
{
m_pcwk->get_fn(m_fn);
m_pcwk->get_b(m_w_6);
m_pcwk->get_u(m_w_u);
m_pcwk->get_k(m_k);
m_pcwk->get_alpa(m_ac);
m_pcwk->get_delta(m_lc);
m_pcwk->get_ramda(m_lpi);
}
UpdateData(false);// update to board
}
void CpaDlg::OnOK()
{
UpdateData(true);// retieved to vars
Enable4Button(false);
GetDlgItem(IDOK)->EnableWindow(false);
if(m_pcwk)
{
m_pcwk->set_fn(m_fn);
m_pcwk->set_b(m_w_6);
m_pcwk->set_u(m_w_u);
m_pcwk->set_k(m_k);
m_pcwk->set_alpa(m_ac);
m_pcwk->set_delta(m_lc);
m_pcwk->set_ramda(m_lpi);
}
::SendMessage(((CFrameWnd*)::AfxGetApp()
->GetMainWnd())
->m_hWnd,
WM_UPDAATEPARAM,
0,0) ;
Enable4Button(true);
GetDlgItem(IDOK)->EnableWindow(true);
}
void CpaDlg::OnSetfocusEditFn()
{
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("Chain-Code 文件");
}
void CpaDlg::OnSetfocusEditWeigted6()
{
UpdateData(true);
pActive=(&(CpaDlg::m_w_6));
Enable4Button(true);
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("σ:用于产生权值");
updategragh();
}
void CpaDlg::OnSetfocusEditWU()
{
UpdateData(true);
pActive=(&(CpaDlg::m_w_u));
Enable4Button(true);
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("μ:用于产生权值");
updategragh();
}
void CpaDlg::OnSetfocusEditK()
{
UpdateData(true);
pActive=(&(CpaDlg::m_k));
Enable4Button(true);
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("κ:评估涉及范围");
}
void CpaDlg::OnSetfocusEditEalpa()
{
UpdateData(true);
pActive=(&(CpaDlg::m_ac));
Enable4Button(true);
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("α:角点阀值");
}
void CpaDlg::OnSetfocusEditLenCompare()
{
UpdateData(true);
pActive=(&(CpaDlg::m_lc));
Enable4Button(true);
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("δ:比较涉及范围");
}
void CpaDlg::OnSetfocusEditLenPi()
{
UpdateData(true);
pActive=(&(CpaDlg::m_lpi));
Enable4Button(true);
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("λ:置角点旁π范围");
}
void CpaDlg::OnKillfocusEditWeigted6()
{
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("");
}
void CpaDlg::OnKillfocusEditK()
{
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("");
}
void CpaDlg::OnKillfocusEditEalpa()
{
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("");
}
void CpaDlg::OnKillfocusEditLenCompare()
{
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("");
}
void CpaDlg::OnKillfocusEditLenPi()
{
GetDlgItem(IDC_STATIC_INFO)->SetWindowText("");
}
void CpaDlg::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
CFrameWnd * pframewnd=((CFrameWnd*)::AfxGetApp()->GetMainWnd()) ;
if(pframewnd==NULL)
return ;
CView * pview=pframewnd->GetActiveView();
if(pview==NULL)
return ;
do{
RECT rmain ;
RECT rparam ;
pframewnd->GetWindowRect(&rmain);
GetWindowRect(&rparam) ;
POINT pt ;
pt.x=rparam.left ; pt.y=rparam.top ;
if(PtInRect(&rmain,pt)) break ;
pt.x=rparam.left ; pt.y=rparam.bottom;
if(PtInRect(&rmain,pt)) break ;
pt.x=rparam.right; pt.y=rparam.top;
if(PtInRect(&rmain,pt)) break ;
pt.x=rparam.right; pt.y=rparam.bottom;
if(PtInRect(&rmain,pt)) break ;
return ;
}while(0) ;
::PostMessage(pview->m_hWnd,WM_COMMAND,IDC_REFRESH ,0) ;
}
void CpaDlg::OnChangeEditWeigted6()
{
updategragh();
}
void CpaDlg::OnChangeEditWU()
{
updategragh();
}
void CpaDlg::updategragh()
{
char str_6[32];
char str_u[32];
GetDlgItem(IDC_EDIT_WEIGTED_6)->GetWindowText(str_6,32);
GetDlgItem(IDC_EDIT_W_U)->GetWindowText(str_u,32);
double d_w_6 =atof(str_6);
double d_w_u =atof(str_u);
CWnd * pgragh=GetDlgItem(IDC_STATIC_GRAPH) ;
CDC * pCDC = pgragh->GetDC();
RECT rsize ;
pgragh->GetClientRect(&rsize);
int ox=rsize.right-rsize.left;
int oy=rsize.bottom-rsize.top;
int i , j ;
for(i=0 ; i<ox ;i++)
for(j=0 ; j<oy ; j++)
pCDC->SetPixel(i,j,RGB(140,140,140)) ;
double y_max =CWK::gformula(d_w_6,d_w_u,d_w_u);
double yper=oy/((5.0/4.0)*y_max);
#define DISP 10
pCDC->MoveTo(0,rsize.bottom-CWK::gformula(d_w_6,d_w_u,0)*yper-DISP);
for(i=0;i<ox;i++)
{
j=rsize.bottom-CWK::gformula(d_w_6,d_w_u,((double)i*0.1))*yper-DISP ;
pCDC->LineTo(i,j) ;
if(i*0.1==(int)(i*0.1))
pCDC->Ellipse(i-2,j-2,i+2,j+2);
}
char str_ymax[16];
sprintf(str