// ioexpdmsdlg.cpp : implementation file // #include "stdafx.h" #include "geomative.h" #include "ioexpdmsdlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CIOExpDmsDlg dialog CIOExpDmsDlg::CIOExpDmsDlg(CWnd* pParent /*=NULL*/) : CDialog(CIOExpDmsDlg::IDD, pParent) { //{{AFX_DATA_INIT(CIOExpDmsDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CIOExpDmsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIOExpDmsDlg) DDX_Control(pDX, IDC_TREE_EXP_DMS, m_dmsTree); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CIOExpDmsDlg, CDialog) //{{AFX_MSG_MAP(CIOExpDmsDlg) ON_WM_SHOWWINDOW() ON_NOTIFY(NM_CLICK, IDC_TREE_EXP_DMS, OnClickTreeExpDms) ON_NOTIFY(TVN_SELCHANGING, IDC_TREE_EXP_DMS, OnSelchangingTreeExpDms) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CIOExpDmsDlg message handlers void CIOExpDmsDlg::OnShowWindow(BOOL bShow, UINT nStatus) { CDialog::OnShowWindow(bShow, nStatus); // TODO: Add your message handler code here CTreeCtrl* pIODmsTree = NULL; CRect rect; pIODmsTree = (CTreeCtrl*)(this->GetDlgItem(IDC_TREE_EXP_DMS)); if (pIODmsTree != NULL) { GetClientRect(&rect); pIODmsTree->MoveWindow(&rect); } pIODmsTree = NULL; } BOOL CIOExpDmsDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_dmsTree.ModifyStyle(0, TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_NOHSCROLL); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CIOExpDmsDlg::OnClickTreeExpDms(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here HTREEITEM hHitItem = NULL; HTREEITEM hCurItem = NULL; HTREEITEM hPreItem = NULL; int iItemState = (int)VAL_ZERO; int iSelItemState = (int)VAL_ZERO; UINT uFlags = (UINT)VAL_ZERO; POINT treePoint; GetCursorPos(&treePoint); treePoint = GetCurrentMessage()->pt; m_dmsTree.ScreenToClient(&treePoint); hHitItem = m_dmsTree.HitTest(treePoint, &uFlags); m_dmsTree.ClientToScreen(&treePoint); if (hHitItem != NULL) { if(uFlags & TVHT_ONITEMSTATEICON) { hCurItem = hHitItem; while (NULL != hCurItem) { hPreItem = hCurItem; if ((hPreItem != hHitItem) && (m_dmsTree.GetCheck(hHitItem) == FALSE)) { m_dmsTree.SetCheck(hPreItem, TRUE); } hCurItem = m_dmsTree.GetParentItem(hCurItem); } hPreItem = NULL; hCurItem = NULL; if ((m_dmsTree.ItemHasChildren(hHitItem) == TRUE) && (m_dmsTree.GetCheck(hHitItem) == TRUE)) { hCurItem = m_dmsTree.GetChildItem(hHitItem); while (hCurItem) { if ((m_dmsTree.ItemHasChildren(hCurItem) == TRUE) && (m_dmsTree.GetCheck(hCurItem) == TRUE)) { hPreItem = m_dmsTree.GetChildItem(hCurItem); while(hPreItem) { m_dmsTree.SetCheck(hPreItem, FALSE); hPreItem = m_dmsTree.GetNextSiblingItem(hPreItem); } } m_dmsTree.SetCheck(hCurItem, FALSE); hCurItem = m_dmsTree.GetNextSiblingItem(hCurItem); } } } } *pResult = 0; } void CIOExpDmsDlg::OnSelchangingTreeExpDms(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here *pResult = 1; }