• 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
  • 相关阅读:
    T100——MENU按钮
    vue 打包问题
    Python: 什么是*args和**kwargs
    windows服务器下部署Apache+Flask+Mod_wsgi+Vue
    树莓派 端口被占用的解决方案
    mac 终端命令总结
    Home Assistant 发现小米设备
    树莓派基于Home Assistant 查询在网设备
    Linux 命令集合-vim
    mac上的hassbian 启动报错1
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/15362573.html
Copyright © 2020-2023  润新知