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

在子窗口上放的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,

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

win32 TreeCtrl控件通知消息, LVN_SELCHANGED和LVN_ITEMCHANGED用法的更多相关文章

  1. MFC之TreeCtrl控件使用经验总结

    树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点.MFC中使用CTreeCtrl类来封装树形控件的各种操作.通过调用BOOL ...

  2. MFC TreeCtrl 控件(一):简单使用

    本文描写叙述了 MFC 中的树形控件 TreeCtrl 的简单使用,内容包含数据项的加入.图标设置.提示信息设置等. 新建基于对话框的应用程序,加入一个 TreeCtrl ,为其定义一个控件变量 m_ ...

  3. win32创建控件的一些问题

    在我们使用CreateWindow();像一般控件建Windows扩展控件的时候我们会发现控件没有创建成功 这是因为我们没有对Windows扩展控件库进行初始化,这要我们使用InitCommonCon ...

  4. 如何给对话框中的控件发送消息呢?Windows消息分类

    以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给 ...

  5. 【转载】MFC动态创建控件及其消息响应函数

    原文:http://blog.sina.com.cn/s/blog_4a08244901014ok1.html 这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数. 参考帖子如下: (1)h ...

  6. MFC动态创建控件及其消息响应函数

    这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数. 参考帖子如下: (1)http://topic.csdn.net/u/20101204/13/5f1b1e70-2f1c-4205-ba ...

  7. win32通用控件

    1.标准控件 可以在win32窗口程序中添加资源脚本来给程序添加标准控件: 具体操作为:新建资源脚本    ->在.rc文件中添加控件    ->给控件绑定事件:   常用的标准控件:   ...

  8. LKNotification控件-通知控件

    通知控件 项目介绍: 一个通知控件,长得很像iOS系统的通知栏弹出时候的样式.可以多个通知覆盖.引入项目之后,只需调用一行代码即可 [Java] 查看源文件 复制代码 ? 1 LKNotificati ...

  9. 【转】Win32 创建控件风格不是Win XP解决方案

    有时候我有在用Win32 API来向窗体上添加控件时,通过CreateWindow或CreateWindowEx创建出来的控件的风格不像XP风格,而是像Windows 2000的风格,界面很难看.注意 ...

随机推荐

  1. WPF 中的形状和基本绘图概述

    本主题概述如何使用 Shape 对象绘图. Shape 是一种允许您在屏幕中绘制形状的 UIElement 类型. 由于它们是 UI 元素,因此 Shape 对象可以在 Panel 元素和大多数控件中 ...

  2. Spring第一课:依赖注入DI(二)

    DI Dependency Injection ,依赖注入 is a :是一个,继承. has a:有一个,成员变量,依赖. class B { private A a;   //B类依赖A类 } 依 ...

  3. GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组

    1 drop table orders; 2 create table orders ( 3 o_id int auto_increment primary key, 4 orderdate date ...

  4. 使用元数据设计的update、query封装

    package util; import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import ...

  5. Spring Cloud总结

    restTemplate 消费者模块编写restTemplate配置类,即可在控制层调用提供者模块 // 配置类 @Configuration public class ApplicationCont ...

  6. MySQL日志系统bin log、redo log和undo log

    MySQL日志系统bin log.redo log和undo log   今人不见古时月,今月曾经照古人. 简介:日志是MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息,主要包括错误日 ...

  7. SpringBoot笔记(6)

    一.数据访问(SQL) 1.数据源的自动配置-HikariDataSource 1.导入JDBC场景 <dependency> <groupId>org.springframe ...

  8. vue 打开新窗口进行打印

    父文件 let { href } = this.$router.resolve({ path: ' 自己配置本地路由,不需要动态路由 ', query: 个人建议传一整个对象 }) window.op ...

  9. 新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题

    摘要:vue-router 默认 hash 模式 -- 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 本文分享自华为云社区<学习Vue Rou ...

  10. MySQL——企业SQL优化方案

    一.大表 (1)列多: 纵向拆分大表: create t1; insert into t1 select id, name from test; (2)行多: 根据数据存放特点和逻辑进行横向拆分大表: ...