NMHDR   =   Notify   Message   Handler

[cpp] view plaincopy
  1. typedef struct tagNMHDR
  2. {
  3. HWND hwndFrom;
  4. UINT_PTR idFrom;
  5. UINT code;
  6. } NMHDR;

消息通过下面的宏定义之: 
  ON_NOTIFY(   wNotifyCode,   idControl,   memberFxn   ) 
  wNotifyCode   
  通知消息标识符代码,如   TBN_BEGINADJUST。   
  idControl   
  发送通知的控件的标识符。   
  memberFxn   
  接收到通知时调用的成员函数。

在WM_NOTIFY中,lParam中放的是一个称为NMHDR结构的指针。在wParam中放的则是控件的ID。  
   
    NMHDR结构是很值得一提的,该结构包括有关制作该通知的控件的任何内容,而不受空间和类型的限制,他的来历也是很有意思的。  
    在最初的windows3.x中,根本就不存在什么WM_NOTIFY,控件通知它们父窗口,如鼠标点击,控件背景绘制事件,通过发送一个消息到父窗口。简单的通知仅发送一个WM_COMMAND消息,包含一个通知码和一个在wParam中的控件ID及一个在lPraram中的控件句柄。这样一来,wParam和lParam就都被填充了,没有额外的空间来传递一些其它的消息,例如鼠标按下的位置和时间。  
     为了克服这个困难,windows3.x就提出了一个比较低级的解决策略,那就是给一些消息添加一些附加消息,最为明显的就是控件自画用到的DRAWITEMSTRUCT。不知道大家对这个结构熟悉不,不过,如果你是老手,你应该非常清楚这个结构,这个结构包含了9个内容,几乎你需要控制的信息都给你提供了。为什么说它比较低级呢?因为不同的消息附加的内容不同,结果就是一盘散沙,非常混乱。  
     在win32中,MS又提出了一个更好的解决方案:引进NMHDR结构。这个结构的引进就是消息统一起来,利用它可以传递复杂的信息。这个结构的布局如下:  
typedef struct tagNMHDR

{  
    HWnd  hWndFrom;// 相当于原WM_COMMAND传递方式的lParam  
    UINT   idFrom;      // 相当于原WM_COMMAND传递方式的wParam(low-order)  
    UINT   code; // 相当于原WM_COMMAND传递方式的NotifyCode(wParam's high- order)

}NMHDR;

对于这个结构的应用于WM_NOTIFY信息结构,结果WM_NOTIFY就变成了: 
          A、无附加信息。结构变得很简单,就是一个NMHDR结构。 
          B、有附加信息。定义一个大的结构,它的第一个元素就是NMHDR结构,它的后面放置附加信息。

举例://得到选中的列
void   CMyView::OnColumnclick(NMHDR*   pNMHDR,   LRESULT*   pResult)    
{       
      NM_LISTVIEW*   pNMListView   =   (NM_LISTVIEW*)pNMHDR;  
      //得到选中的列      
      int nColumn=pNMListView->iSubItem;

}   
  成员函数将用下列原型声明:  
 afx_msg   void   memberFxn(NMHDR *pNotifyStruct,LRESULT   *pResult);

由此知识就可方便解释NM_LISTVIEW与NM_TREEVIEW了,

其实:

NM_LISTVIEW 为

#define LPNM_LISTVIEW   LPNMLISTVIEW
 #define NM_LISTVIEW     NMLISTVIEW
而NMLISTVIEW结构为:

typedef struct tagNMLISTVIEW {
    NMHDR hdr;
    int iItem;
    int iSubItem;
    UINT uNewState;
    UINT uOldState;
    UINT uChanged;
    POINT ptAction;
    LPARAM lParam;
} NMLISTVIEW, *LPNMLISTVIEW;

NMHDR 与 NM_LISTVIEW,NM_TREEVIEW 的关系相关推荐

  1. Linux shell 学习笔记(3)— shell 父子关系及内建命令

    1. shell 类型 只要用户登录到某个虚拟控制台终端或是在 GUI 中启动终端仿真器,默认的 shell 程序就会开始运行. 默认的交互 shell 会在用户登录某个虚拟控制台终端或在 GUI 中 ...

  2. 知识图谱中传统关系抽取方法

    目前主要采用统计机器学习的方法,将关系实例转换成高 维空间中的特征向量或直接用离散结构来表示,在标注语 料库上训练生成分类模型,然后再识别实体间关系  基于特征向量方法 最大熵模型(Kambhatl ...

  3. 用男女朋友关系解释计算机常用概念

    运维方面 很多同学对热备,冷备,云备了解不深,我科普一下 IT 行业各种备份术语.以后别闹笑话了. 假设你是一位女性,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人.你随时可以 ...

  4. 与人相处时不越界,能让关系更和谐

    在这世上,我们每天都要与人相处:与人相处是一门学问,需要把握一个界限,当你过度的想要保持距离时,会让对方感觉你不近人情:而当你过度的亲密不拿自己当外人时,又可能是越界了. 每个人都有自己的朋友圈子和生 ...

  5. 想让关系更好就不要怕麻烦

    在生活或工作想让关系更好就不要怕麻烦他人,也不要怕他人麻烦自己.如果总是怕麻烦,你不联系我,我也不联系你,感情也就真的淡了还可能也疏远了. 人与人之间浓厚的感情,就是在这一求一应,互相帮助中,慢慢得到 ...

  6. SSAN 关系抽取 论文笔记

    20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...

  7. 数据库 user schema sqlserver 关系

    一个登录名可以对应一个服务器中的不同数据库下的用户名 数据库和用户名 是一一对应的 select * from dba_tables t where t.owner='用户id'; dba_table ...

  8. 数学上各种空间概念的关系图

    https://blog.csdn.net/cc1949/article/details/79744519 数学上有各种空间,概念容易混淆,为了记忆,整理出一张关系图. 目前不清楚无限维的内积空间是什 ...

  9. relay.build调用关系

    relay.build调用关系 在用TVM优化过程中,常见demo如下图: relay.build背后的调用机制梳理如下: python中的build函数实现如下,此方法实际调用了BuildModul ...

最新文章

  1. Docker 私有仓库最简便的搭建方法
  2. 双层for循环时间复杂度_2 常见的时间复杂度实例
  3. vivox60pro和iqoo7pro哪个好
  4. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
  5. C++实现两个矩阵相乘
  6. php微信分享接口调用,TP5的微信分享接口和JSSDK使用
  7. oracle导入 表 卡住了,oracle数据库怎么导入dmp,只导入数据不导入表结构?
  8. 最速下降法和牛顿方法的Python实现和MATLAB实现
  9. python groupby_用python自动生成全校学生成绩报告
  10. 腾控Multiprog 使用问题 (持续更新)
  11. Google开源的操作系统Fuchsia,专为大内存硬件设计
  12. oracle数据库查询空间大小,Oracle查看数据库空间使用情况
  13. Linux音频系统编程之芯片平台适配功放Codec Driver解读
  14. config.c 或者config.s 依照os的不同而config.X 的X也是不同的:
  15. Python正则表达式中的r
  16. PTA自测-1 打印沙漏 python实现
  17. 微信小游戏 缓存目录
  18. LCT学习笔记/基本思路
  19. 学生成绩处理(函数版)
  20. [附源码]java毕业设计零食销售系统

热门文章

  1. 分布式理论(一) - CAP定理
  2. dyld: Library not loaded: @rpath/MySDK.framework/MySDK 错误解决
  3. SSH-KeyGen 的用法 【转载】
  4. apache 修改最大连接数
  5. 80%的企业社会化商务应用可能无法取得预期效果
  6. .net程序员的盲点(八):泛型
  7. PIL 学习笔记(3)
  8. 容器,你还只用Docker吗?(下)
  9. ComputeShader中Counter类型的使用
  10. JavaScript 之 typeof