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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32716885/article/details/83820800

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。

猜你喜欢

转载自blog.csdn.net/qq_32716885/article/details/83820800