C++中控件一些不爲人知的消息流程

1:TreeCtrl控件

功能:想要獲取點擊的Item內容,想着在NM_CLICK消息中處理。

以下是我的處理方式:

void CTest_TreeCtrlDlg::OnNMClickTreeNormal(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知處理程序代碼
    *pResult = 0;
    HTREEITEM   hItem = m_tree.GetSelectedItem();
    CString  strSelect =  m_tree.GetItemText(hItem);
    AfxMessageBox(strSelect);//提示選中的文本信息
	
}

根據上述代碼設置後,發現,當我點擊item時,是有延遲操作的。每次選中的是上一個item的內容,很是奇怪?

難道是我沒有根據鼠標座標來獲取的原因?這個有待考察。

後來,我就用TVN_SELCHANGED消息處理。

以下是我的處理方式:

void CTest_TreeCtrlDlg::OnTvnSelchangedTreeNormal(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	// TODO: 在此添加控件通知處理程序代碼
	*pResult = 0;
	HTREEITEM   hItem = m_tree.GetSelectedItem();
	CString  strSelect =  m_tree.GetItemText(hItem);
}

當這兩個消息同時存在時,出現了一種現象:

NMCLICK消息只顯示包含子節點的item,TVN_SELCHANGED只顯示子節點item。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章