我使用了TVN_SELCHANGED消息来查找用户在项目树(菜单)中选择的内容。
但是,如果用户不断点击同一项目,则不会发生该消息。
我希望treeCtrl丢失其发生TVN_SELCHANGED的项目选择。 (换句话说,即使用户连续点击同一项目,我也想发生事件)
我该怎么做?
答案 0 :(得分:2)
TVN_SELCHANGE无济于事。没有任何更改,因此不会发送通知。即使这对我来说也没有意义。如果用户点击已选择的项目,UI应该做什么?没什么......我猜。
如果你想要解决这个问题,你必须自己动手。
答案 1 :(得分:1)
当一个项目被选中的TREECTRL将得到通知的唯一情况是:TVN_SELCHANGE。如果选择相同,这将无济于事。但是还有另一种方式来得到通知。 在使用TreeCtrl的对话框类中添加PreTranslateMessage命令,并添加下面编写的代码。
//---------------------------------------------------------------------------
BOOL MyDlgClass::PreTranslateMessage(MSG* pMsg)
{
UINT msgValue = pMsg->message;
//here I have compared L button down event, you can use any
//mouse/keyboard event that you want to compare.
if (msgValue == WM_LBUTTONDOWN)
{
CPoint point;
point.x = (int)(short)LOWORD(pMsg->lParam);
point.y = (int)(short)HIWORD(pMsg->lParam);
OnLButtonDown(pMsg->message, point);
}
}
void MyDlgClass::OnLButtonDown(UINT nType, CPoint point)
{
UINT uFlags;
HTREEITEM hItem = m_treeCtrl.HitTest(point, &uFlags);
if ((hItem != NULL) && (TVHT_ONITEMBUTTON & uFlags))
{
return;
}
//TVHT_ONITEMBUTTON detects if user has clicked + or - button of tree
//view.
//Add code to perform your operations on hItem.
}