// optgddlg.cpp : implementation file // #include "stdafx.h" #include "geomative.h" #include "optgddlg.h" #include "floatedit.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // COpTGDDlg dialog extern HHOOK hHook; extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam); COpTGDDlg::COpTGDDlg(CWnd* pParent /*=NULL*/) : CDialog(COpTGDDlg::IDD, pParent) { //{{AFX_DATA_INIT(COpTGDDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void COpTGDDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COpTGDDlg) DDX_Control(pDX, IDC_TGD_LIST, m_tgdList); DDX_Control(pDX, IDC_ED_ELEVATION, m_edElevation); DDX_Control(pDX, IDC_ED_DISTANCE, m_edDistance); DDX_Control(pDX, IDC_CB_TGDSN, m_cbTGDSN); DDX_Control(pDX, IDC_CB_DISTANCE_TYPE, m_cbDisType); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(COpTGDDlg, CDialog) //{{AFX_MSG_MAP(COpTGDDlg) ON_BN_CLICKED(IDC_BTN_INS, OnBtnIns) ON_NOTIFY(LVN_ITEMCHANGED, IDC_TGD_LIST, OnItemchangedTgdList) ON_BN_CLICKED(IDC_BTN_UPD, OnBtnUpd) ON_BN_CLICKED(IDC_BTN_DEL, OnBtnDel) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COpTGDDlg message handlers BOOL COpTGDDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here int iColIndex = (int)VAL_ZERO; CString strColTitle = _T(""); m_edDistance.SetIntLimitLen(3); m_edDistance.SetDecLimitLen(0); m_edDistance.SetIsMinus(); m_edDistance.SetWindowText(_T("0")); m_edElevation.SetIntLimitLen(3); m_edElevation.SetDecLimitLen(3); m_edElevation.SetWindowText(_T("0")); m_tgdList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES); iColIndex = (int)VAL_ZERO; strColTitle.Empty(); strColTitle.LoadString(IDS_SN); m_tgdList.InsertColumn(iColIndex, strColTitle, LVCFMT_LEFT, 100); iColIndex++; strColTitle.Empty(); strColTitle.LoadString(IDS_DISTANCE); m_tgdList.InsertColumn(iColIndex, strColTitle, LVCFMT_LEFT, 100); iColIndex++; strColTitle.Empty(); strColTitle.LoadString(IDS_ELEVATION); m_tgdList.InsertColumn(iColIndex, strColTitle, LVCFMT_LEFT, 100); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void COpTGDDlg::OnBtnIns() { // TODO: Add your control notification handler code here CString szValue = _T(""); int iIndex = (int)VAL_ZERO; iIndex = this->m_tgdList.GetItemCount(); szValue.Empty(); szValue.Format(_T("%d"), iIndex + 1); this->m_tgdList.InsertItem(iIndex, szValue); this->m_cbTGDSN.AddString(szValue); if (this->m_cbTGDSN.GetCurSel() == (int)VAL_MINUS_ONE) { this->m_cbTGDSN.SetCurSel(0); } szValue.Empty(); m_edDistance.GetWindowText(szValue); this->m_tgdList.SetItemText(iIndex, 1, szValue); szValue.Empty(); m_edElevation.GetWindowText(szValue); this->m_tgdList.SetItemText(iIndex, 2, szValue); this->m_tgdList.SetItemData(iIndex, (DWORD)iIndex + 1); } void COpTGDDlg::OnItemchangedTgdList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here if (((pNMListView->uOldState & LVIS_SELECTED) == VAL_ZERO) && ((pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)) { this->m_edDistance.SetWindowText(_T("")); this->m_edDistance.SetWindowText(this->m_tgdList.GetItemText(pNMListView->iItem, 1)); this->m_edElevation.SetWindowText(_T("")); this->m_edElevation.SetWindowText(this->m_tgdList.GetItemText(pNMListView->iItem, 2)); } *pResult = 0; } void COpTGDDlg::OnBtnUpd() { // TODO: Add your control notification handler code here CString szValue = _T(""); int iIndex = (int)VAL_ZERO; POSITION pos = NULL; pos = NULL; pos = this->m_tgdList.GetFirstSelectedItemPosition(); if (NULL != pos) { iIndex = this->m_tgdList.GetNextSelectedItem(pos); szValue.Empty(); m_edDistance.GetWindowText(szValue); this->m_tgdList.SetItemText(iIndex, 1, szValue); szValue.Empty(); m_edElevation.GetWindowText(szValue); this->m_tgdList.SetItemText(iIndex, 2, szValue); } else { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(_T("Please select terrain data record!")); return; } } void COpTGDDlg::OnBtnDel() { // TODO: Add your control notification handler code here CString szValue = _T(""); int iIndex = (int)VAL_ZERO; POSITION pos = NULL; pos = NULL; pos = this->m_tgdList.GetFirstSelectedItemPosition(); if (NULL != pos) { iIndex = this->m_tgdList.GetNextSelectedItem(pos); this->m_tgdList.DeleteItem(iIndex); } else { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(_T("Please select terrain data record!")); return; } this->m_cbTGDSN.ResetContent(); iIndex = (int)VAL_ZERO; while (iIndex < this->m_tgdList.GetItemCount()) { szValue.Empty(); szValue.Format(_T("%d"), iIndex + 1); this->m_tgdList.SetItemText(iIndex, 0, szValue); this->m_tgdList.SetItemData(iIndex, (DWORD)iIndex + 1); this->m_cbTGDSN.AddString(szValue); this->m_cbTGDSN.SetItemData(iIndex, (DWORD)iIndex + 1); iIndex ++; } this->m_cbTGDSN.SetCurSel(-1); } void COpTGDDlg::OnOK() { // TODO: Add extra validation here CString szValue = _T(""); CString szCaption = _T(""); if (this->m_cbDisType.GetCurSel() == -1) { szCaption.Empty(); szCaption.LoadString(IDS_CAPTION_0010); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szCaption); return; } if (this->m_tgdList.GetItemCount() == 0) { szCaption.Empty(); szCaption.LoadString(IDS_CAPTION_0012); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szCaption); return; } if (this->m_cbTGDSN.GetCurSel() == -1) { szCaption.Empty(); szCaption.LoadString(IDS_CAPTION_0011); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); MessageBox(szCaption); return; } CDialog::OnOK(); } BOOL COpTGDDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) { return TRUE; } if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) { return TRUE; } return CDialog::PreTranslateMessage(pMsg); }