NMHDR 结构
来源:互联网 发布:jdk 8u20 windows x64 编辑:程序博客网 时间:2024/06/06 01:44
NMHDR=Notify Message Handler 通知消息
NMHDR 结构包含下列成员:
typedef struct tagNMHDR
{
HWND hnwdFrom:////handle of control sending message
UINT idFrom; //identifier of control sending message
UINT codel; //notification code; see below
}NMHDR;
消息通过下面的宏定义:
ON_NOTIFY(wNotifyCode,idControl,memberFxn)
wNotifyCode: 通知消息标识符的代码,如TTN_NEEDTEXT
idControl : 发送通知的控件的标识符
memberFxn: 接收到通知时的函数
成员函数用下面的原型声明:
afx_msg void memberFxn(NMHDR * pNotifyStruct, LRESULT * result)
在WM_NOTIFY中,lParam中放的是一个称为NMHDR结构的指针。在wParam中放的则是控件的ID。
NMHDR结构是很值得一提的,该结构包括有关制作该通知的控件的任何内容,而不受空间和类型的限制,他的来历也是很有意思的。
最初的windows3.x中,根本就不存在什么WM_NOTIFY,控件通知它们父窗口,如鼠标点击,控件背景绘制事件,通过发送一个消息到父窗口。简单的通知仅发送一个WM_COMMAND消息,包含一个通知码和一个在wParam中的控件ID及一个在lPraram中的控件句柄。这样一来,wParam和lParam就都被填充了,没有额外的空间来传递一些其它的消息,例如鼠标按下的位置和时间。
为了克服这个困难,windows3.x就提出了一个比较低级的解决策略,那就是给一些消息添加一些附加消息,最为明显的就是控件自画用到的AWITEMSTRUCT。不知道大家对这个结构熟悉不,不过,如果你是老手,你应该非常清楚这个结构,这个结构包含了9个内容,几乎你需要控制的信息都给你提供了。为什么说它比较低级呢?因为不同的消息附加的内容不同,结果就是一盘散沙,非常混乱。
在win32中,MS又提出了一个更好的解决方案:引进NMHDR结构。这个结构的引进就是消息统一起来,利用它可以传递复杂的信息。这个结构的布局如下:
NMHDR{
HWnd hWndFrom ; 相当于原WM_COMMAND传递方式的lParam
UINT idFrom ;相当于原WM_COMMAND传递方式的wParam(low-order)
UINT code ;相当于原WM_COMMAND传递方式的Notify Code(wParam"s high-order)
};
对于这个结构的应用于WM_NOTIFY信息结构,结果WM_NOTIFY就变成了:
A、无附加信息。结构变得很简单,就是一个NMHDR结构
B、有附加信息。定义一个大的结构,它的第一个元素就是NMHDR结构,它的后面放置附加信息。举例://得到选中的列
void CMyView::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; //得到选中的列
column=pNMListView->iSubItem;
}
由于在大结构中,第一个成员为NMHDR,这样一来,我们就可以利用指向NMHDR的指针来传递结构地址,根据指针的特性,无论消息有没有附加信息,这个指针都适用,也能够很方便的进行强制转换。
- NMHDR 结构
- 全面解读WM_NOTIFY NMHDR结构
- 全面解读WM_NOTIFY NMHDR结构
- 全面解读WM_NOTIFY NMHDR结构
- 全面解读WM_NOTIFY NMHDR结构
- 全面解读WM_NOTIFY NMHDR结构
- NMHDR
- NMHDR
- NMHDR
- NMHDR
- 【MFC消息】 全面解读WM_NOTIFY NMHDR结构
- 解读WM_NOTIFY消息中的NMHDR结构
- NMHDR浅析
- NMHDR Structure
- NMHDR Structure
- 关于 NMHDR学习 转
- NMHDR和NM_TREEVIEW转换问题
- NMHDR = Notify Message Handler
- 一次汇总数据的shell
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
- Nginx模块开发---Nginx开发从入门到精通 读书笔记(二)---Nginx基础概念
- js实现页面跳转的几种方式
- rsyslog.conf和syslog函数使用
- NMHDR 结构
- xml命名字母必须小写
- 新书《深入解析MapReduce架构设计与实现原理》
- WindowBuilder安装与简单使用
- spring3整合quartz实现任务调度功能
- Oracle10g、11g寂(静)寞安装
- Centos6.0 64位MySQL 5.6.11 CMake 安装部署
- java每日面试题2013/4/27
- 光线跟踪(简化版,只跟踪光源直接到达和环境光)