2012-05-31 58 views
1

我在對話框中有一個CTreeCtrl並捕獲TVN_SELCHANGED消息,但執行不會進入處理程序。什麼可能是錯誤的? 我的代碼:不能捕捉TVN_SELCHANGED

BEGIN_MESSAGE_MAP(CMaterParamExtDlg, CDialog) 
    ON_NOTIFY(TVN_ITEMCHANGING, IDC_MATERIAL_PROP_TREE, OnSelChangingTreeCtrl) 
    ON_NOTIFY(TVN_ITEMCHANGED, IDC_MATERIAL_PROP_TREE, OnSelChangedTreeCtrl) 
END_MESSAGE_MAP() 

void CMaterParamExtDlg :: OnSelChangedTreeCtrl (NMHDR* pNMHDR, LRESULT* pResult) 
{ 
    if (m_TreeCtrl != 0) 
    { 
     HTREEITEM treeitem = m_TreeCtrl->GetSelectedItem(); 
     CString treeitemtext = m_TreeCtrl->GetItemText(treeitem); 

     MessageBox(treeitemtext); 
    } 

    *pResult = 0; 
} 

void CMaterParamExtDlg :: OnSelChangingTreeCtrl (NMHDR* pNMHDR, LRESULT* pResult) 
{ 
    if (m_TreeCtrl != 0) 
    { 
     HTREEITEM treeitem = m_TreeCtrl->GetSelectedItem(); 
     CString treeitemtext = m_TreeCtrl->GetItemText(treeitem); 

     MessageBox(treeitemtext); 
    } 

    *pResult = 0; 
} 

我試圖用的斷點,看是否執行進入處理程序,但沒有任何反應。

樹控件屬性:

CONTROL   "",IDC_MATERIAL_PROP_TREE,"SysTreeView32",TVS_HASBUTTONS 
| TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP 
| TVS_TRACKSELECT | WS_BORDER | WS_HSCROLL | WS_TABSTOP,4,4,115,218 
+0

您示例中的消息映射不包含「TVN_SELCHANGED」條目。你確定你發佈了正確的代碼嗎? –

+0

@Joachim Pileborg非常感謝。我的消息不匹配。奇怪的是,我沒有注意到它。 – user1260953

回答

3

相當簡單。使用TVN_SELCHANGED而不是TVN_ITEMCHANGED。同上TVN_ITEMCHANGING。