ListView 用法 发送WM_NOTITY消息

本文详细介绍了Windows编程中ListView控件的WM_NOTIFY消息处理,特别是NMHDR结构的使用。通过分析WM_NOTIFY消息的参数,揭示了从早期Windows3.x到Win32 API中通知消息处理方式的演变,以及NMHDR结构如何统一和优化信息传递。文中通过实例展示了如何响应NM_CLICK事件,获取被点击列表项的文本并弹出提示框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在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结构。这个结构的引进就是消息统一起来,利用它可以传递复杂的信息。这个结构的布局如下: 
          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结构,它的后面放置附加信息。

case WM_NOTIFY:
       {       
   if (wParam == IDC_LIST1)
            {
                NM_LISTVIEW* phdr = (NM_LISTVIEW*)lParam;
                if (phdr->hdr.code == NM_CLICK && phdr->iItem != 0xffffffff)
                {
                    char text[128];
                    HWND hList = GetDlgItem(hWnd, IDC_LIST1);
                    ListView_GetItemText(hList, phdr->iItem, phdr->iSubItem, text, sizeof(text));
     
                    MessageBox(hWnd, text, text, MB_OK);
                }
            }
   
        }
        break;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值