// navdevview.cpp : implementation file // #include "stdafx.h" #include "geomative.h" #include "navdevview.h" #include "Constant.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CNavDevView IMPLEMENT_DYNCREATE(CNavDevView, CFormView) CNavDevView::CNavDevView() : CFormView(CNavDevView::IDD) { //{{AFX_DATA_INIT(CNavDevView) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CNavDevView::~CNavDevView() { } void CNavDevView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNavDevView) DDX_Control(pDX, IDC_NAV_DEV_TREE, m_devTree); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CNavDevView, CFormView) //{{AFX_MSG_MAP(CNavDevView) ON_WM_SIZE() ON_NOTIFY(NM_RCLICK, IDC_NAV_DEV_TREE, OnRclickNavDevTree) ON_NOTIFY(TVN_SELCHANGED, IDC_NAV_DEV_TREE, OnSelchangedNavDevTree) ON_NOTIFY(TVN_SELCHANGING, IDC_NAV_DEV_TREE, OnSelchangingNavDevTree) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CNavDevView diagnostics #ifdef _DEBUG void CNavDevView::AssertValid() const { CFormView::AssertValid(); } void CNavDevView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CNavDevView message handlers void CNavDevView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: Add your message handler code here CTreeCtrl* pNavTree = NULL; pNavTree = (CTreeCtrl*)GetDlgItem(IDC_NAV_DEV_TREE); if ((NULL != pNavTree)) { CRect rect; GetClientRect(&rect); pNavTree->MoveWindow(&rect); } pNavTree = NULL; } void CNavDevView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class m_devTree.ModifyStyle(0, TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS); } void CNavDevView::OnRclickNavDevTree(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CMainFrame* pMainFrm = NULL; HTREEITEM hHitItem = NULL; UINT uFlags; CPoint treePoint; GetCursorPos(&treePoint); m_devTree.ScreenToClient(&treePoint); MapWindowPoints(&m_devTree, &treePoint, 1); hHitItem = m_devTree.HitTest(treePoint, &uFlags); m_devTree.SelectItem(hHitItem); m_devTree.ClientToScreen(&treePoint); // Schedule(); pMainFrm = (CMainFrame*)AfxGetMainWnd(); if (pMainFrm->MDIGetActive()->IsZoomed()) { if ((NULL != hHitItem) && (TVHT_ONITEM & uFlags)) { CMenu* pMenu = pMainFrm->GetMenu()->GetSubMenu(4)->GetSubMenu(2); if (NULL != pMenu) { pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, treePoint.x, treePoint.y, GetParentFrame()); } } } else { if ((NULL != hHitItem) && (TVHT_ONITEM & uFlags)) { CMenu* pMenu = pMainFrm->GetMenu()->GetSubMenu(3)->GetSubMenu(2); if (NULL != pMenu) { pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, treePoint.x, treePoint.y, GetParentFrame()); } } } *pResult = 0; } void CNavDevView::Schedule() { HTREEITEM hDevItem = NULL; DWORD dwItemHandle = (DWORD)VAL_ZERO; DWORD dwImageState = (DWORD)VAL_ZERO; hDevItem = m_devTree.GetSelectedItem(); if (NULL != hDevItem) { dwItemHandle = m_devTree.GetItemData(hDevItem); dwImageState = m_devTree.GetItemState(hDevItem, TVIS_STATEIMAGEMASK); ::SendMessage(GetParentFrame()->m_hWnd, WM_SCHEDULE, (WPARAM)dwItemHandle, (LPARAM)dwImageState); } else { ::SendMessage(GetParentFrame()->m_hWnd, WM_SCHEDULE, (WPARAM)VAL_ZERO, (LPARAM)VAL_ZERO); } } void CNavDevView::OnSelchangedNavDevTree(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here Schedule(); *pResult = 0; } void CNavDevView::OnSelchangingNavDevTree(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here if (0x1000 == pNMTreeView->action) { *pResult = 1; } else { *pResult = 0; } }