win32 TreeCtrl控件通知消息, LVN_SELCHANGED和LVN_ITEMCHANGED用法

今天出了个奇怪的问题,当我在主窗口上创建一个用模板对话框的子窗口时,

在子窗口上放的TreeCtrl控件不响应LVN_SELCHANGED消息,也是晕死了,

我以为是消息捕获的问题,我在主窗口上也捕获不到,子窗口上也捕获不到,

最后跑到全局消息循环中也捕获不到,就这样消失了,不知道去哪去了.

好奇怪哦.

 

最后在网上找了半天,就用TVN_ITEMCHENGED消息码就能捕获了,晕菜了,

好吧,就用这个消息也可以,就不纠结哪些问题了.

下面是TVN_ITEMCHENGED消息在WM_NOTIFY消息中的应用

在测试的时候,要获取两次数据,一次是原来选中的数据,一次是新选中的数据,

所以要用 

if(tv->uChanged&TVIF_STATE&&tv->uStateNew&TVIS_SELECTED)
来判断是新选中的数据,还是原来选中的数据
int TreeDlg::OnTvnSelChanged_Tree1(UINT id, LPNMHDR lpNMHdr)
{
    NMTVITEMCHANGE* tv = (NMTVITEMCHANGE*)lpNMHdr;

    if(tv->uChanged&TVIF_STATE && tv->uStateNew&TVIS_SELECTED)
    {

      TCHAR itemText[32] = { 0 };


      TVITEM tvItem = { 0 };
      tvItem.mask = TVIF_TEXT;
      tvItem.hItem = tv->hItem;
      tvItem.cchTextMax = 32;
      tvItem.pszText = itemText;

      TreeView_GetItem(lpNMHdr->hwndFrom, &tvItem);


    }
    
    return 0;
}

 

只要能读出数据,用哪个消息都不存在,

但我又另弄了个工程,专门来测试这问题,新工程序中却又能捕获到LVN_SELCHANGED消息了,

却不能捕获LVN_ITEMCHANGED消息……………………

再次晕菜了,

 

 

最后的最后,两个工程来回的试,不能两个消息都捕获,能捕获LVN_SETCHANGED,就不能捕获LVN_ITEMCHANGED,

 

问题是什么情况下用什么消息就弄不明白了,也就只好这样了,能捕获哪个就用哪个………

 

Tags: