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,
问题是什么情况下用什么消息就弄不明白了,也就只好这样了,能捕获哪个就用哪个.........
win32 TreeCtrl控件通知消息, LVN_SELCHANGED和LVN_ITEMCHANGED用法的更多相关文章
- MFC之TreeCtrl控件使用经验总结
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点.MFC中使用CTreeCtrl类来封装树形控件的各种操作.通过调用BOOL ...
- MFC TreeCtrl 控件(一):简单使用
本文描写叙述了 MFC 中的树形控件 TreeCtrl 的简单使用,内容包含数据项的加入.图标设置.提示信息设置等. 新建基于对话框的应用程序,加入一个 TreeCtrl ,为其定义一个控件变量 m_ ...
- win32创建控件的一些问题
在我们使用CreateWindow();像一般控件建Windows扩展控件的时候我们会发现控件没有创建成功 这是因为我们没有对Windows扩展控件库进行初始化,这要我们使用InitCommonCon ...
- 如何给对话框中的控件发送消息呢?Windows消息分类
以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给 ...
- 【转载】MFC动态创建控件及其消息响应函数
原文:http://blog.sina.com.cn/s/blog_4a08244901014ok1.html 这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数. 参考帖子如下: (1)h ...
- MFC动态创建控件及其消息响应函数
这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数. 参考帖子如下: (1)http://topic.csdn.net/u/20101204/13/5f1b1e70-2f1c-4205-ba ...
- win32通用控件
1.标准控件 可以在win32窗口程序中添加资源脚本来给程序添加标准控件: 具体操作为:新建资源脚本 ->在.rc文件中添加控件 ->给控件绑定事件: 常用的标准控件: ...
- LKNotification控件-通知控件
通知控件 项目介绍: 一个通知控件,长得很像iOS系统的通知栏弹出时候的样式.可以多个通知覆盖.引入项目之后,只需调用一行代码即可 [Java] 查看源文件 复制代码 ? 1 LKNotificati ...
- 【转】Win32 创建控件风格不是Win XP解决方案
有时候我有在用Win32 API来向窗体上添加控件时,通过CreateWindow或CreateWindowEx创建出来的控件的风格不像XP风格,而是像Windows 2000的风格,界面很难看.注意 ...
随机推荐
- python turtle的使用
turtle.pendown() # 放下画笔 turtle.penup() # 抬起画笔 turtle.pensize(int) # 设置画笔宽度,值为整数型 turtle.forward(f ...
- servlet初识servletConfig
package day09; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...
- docker安装与配置redis详细过程
注:大鸟飞过,这只是简单搭建,能快速运用而已!! 第一步 pull redis 命令:docker pull redis 第二步 创建redis管理目录,方便后期管理 命令: mkdir /data/ ...
- 关于notepad++使用的那些事儿
时间:2019-04-11 整理:PangYuaner 标题:Notepad++正则表达式语法 地址:https://www.cnblogs.com/kekec/p/5255475.html 标题:N ...
- Javascirpt 面向对象总结-公有/私有
虽说js是一门面向对象的语言,但是它并不像C++,C#,Java等那样,具有典型的面向对象的特征.因此在这里总结一下如何编写具有面向对象特征的程序. [私有变量] 在对象内部使用'var'关键字来声明 ...
- python使用pip安装模块出错 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None))
python使用pip安装模块出错 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) 问题: ...
- (1)RabbitMQ在Docker上安装
1.简介 在来学习RabbitMQ时候,我觉得很有必要先把它的环境先搭建起来,这样后面的示例才能进行.因为之前自己手动在Linux服务器上搭建过Elasticsearch,当时踩过太多坑了,浪费太多时 ...
- 聊聊 Jmeter 如何并发执行 Python 脚本
1. 前言 大家好,我是安果! 最近有小伙伴后台给我留言,说自己用 Django 写了一个大文件上传的 Api 接口,现在想本地检验一下接口并发的稳定性,问我有没有好的方案 本篇文章以文件上传为例,聊 ...
- 常量&&变量
一.常量:程序运行期间不变 常量使用: 二.八大基本数据类型变量: 其中,一个Byte类型数据占八个bit位,所以范围是(-2^7 ~ 2^7-1),数据最小的存储单位,是四分之一的int类型空间,所 ...
- 动态路由——OSPF
目录: 一. OSPF路由协议概述 1,OSPF协议 2,内部网关协议和外部网关协议 3,OSPF的工作过程 二.OSPF基本概念 1,OSPF区域 2,区域ID 3,R ...