zoukankan      html  css  js  c++  java
  • win32 TreeCtrl控件通知消息, LVN_SELCHANGED和LVN_ITEMCHANGED用法

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

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

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

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

    好奇怪哦.

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

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

    1.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;
    }

    2.LVN_SELCHANGED消息在WM_NOTIFY中的应用

    INT_PTR QTreeDlg::OnNotify(WPARAM wParam, LPARAM lParam)
    {
        LPNMHDR lpHdr = (LPNMHDR)lParam;
        if (lpHdr->idFrom == IDC_TREE1 && lpHdr->code == TVN_SELCHANGED)
        {
            TCHAR itemText[32] = { 0 };
    
            NMTREEVIEW* pNMtv = (NMTREEVIEW*)lParam;
    
            TVITEM tv = { 0 };
            tv.mask = TVIF_TEXT;
            tv.hItem = pNMtv->itemNew.hItem;
            tv.cchTextMax = 32;
            tv.pszText = itemText;
            TreeView_GetItem(lpHdr->hwndFrom, &tv);
            int n = 9;
        }
        return 0;
    }

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

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

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

    再次晕菜了,

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

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

    签名:GreenLeaf1976
  • 相关阅读:
    CSP-S2019游记
    SOJ 一句话题解整理
    CF547E Mike and Friends
    CF506E Mr. Kitayuta's Gift
    在windows环境下安装和使用Python(CPython)
    GeekGame2020_部分WriteUp
    php通过curl传输JSON对象
    Invalid datetime format: 1292 Incorrect datetime value
    解决 select2 开启 tags 不能输入中文的问题
    electerm 设置同步(Setting sync)
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/15362573.html
Copyright © 2011-2022 走看看