zoukankan      html  css  js  c++  java
  • List Control控件中及时捕获checkbox被选中的消息的解决方案

    转自:http://blog.csdn.net/vycode/article/details/7345073

    我的功能需求是:用户可以在List Control里添加item,当无选项被选中(即Checkbox没被选中),删除按钮不可用;当用户点击checkbox选中item时,删除按钮可用。

    图示如下:

    图一 模拟图

    运行后如下:

    图二 无选项被选中

    图三 有选项被选中

    好了,废话不多说,直接上代码:

    响应LVN_ITEMCHANGED消息函数:

     1 void CLicenseGenDlg::OnLvnItemchangedListResource(NMHDR *pNMHDR, LRESULT *pResult)  
     2 {  
     3     LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);  
     4     // TODO: Add your control notification handler code here  
     5     *pResult = 0;  
     6     int nItem,i;  
     7     nItem = m_list_resource.GetItemCount();  
     8   
     9     bool mark = false;  
    10     for (i = 0; i < nItem && !mark; ++i)  
    11     {  
    12         if (m_list_resource.GetCheck(i))  
    13         {  
    14             mark= true;  
    15         }     
    16     }  
    17     if (mark)  
    18     {  
    19         GetDlgItem(IDC_BTN_DELITEM)->EnableWindow(TRUE);//有list选项选中后使删除按钮可用  
    20     }  
    21     else  
    22     {  
    23         GetDlgItem(IDC_BTN_DELITEM)->EnableWindow(FALSE);//无lisr选项选中使删除按钮变灰  
    24     }  
    25 }  

    不过在解决上述问题之前,我尝试了另外一个消息函数NM_CLICK,虽然能达到获知list改变消息,但不能及时捕获checkbox状态,总是慢了一个鼠标点击动作时间段。
    附录:

    LVN_BEGINDRAG 鼠标左键正在被触发以便进行拖放操作(当鼠标左键开始拖拽列表视图控件中的项目时产生)

    LVN_BEGINRDRAG 鼠标右键正在被触发以便进行拖放操作(当鼠标右键开始拖拽列表视图控件中的项目时产生)

    LVN_BEGINLABELEDIT 开始编辑项的文本

    LVN_COLUMNCLICK 单击列(当鼠标单击列表视图控件列标题时产生)

    NM_CLICK 当鼠标单击列表视图控件时产生

    LVN_COLUMNCLICK 单击列

    LVN_DELETEALLITEMS 删除所有项

    LVN_DELETEITEM 删除某个项

    NM_DBLCLK 当鼠标双击列表视图控件时产生

    LVN_ENDLABELEDIT 结束对项文本的编辑

    LVN_GETDISPINFO 请求需要显示的信息

    LVN_GETINFOTIP 请求显示在工具提示窗口内的附加的文本信息

    LVN_HOTTRACK 鼠标滑过某个项

    LVN_INSERTITEM 当向列表视图控件插入项目时产生

    lVN_ITEMACTIVATE 激活某个项

    LVN_ITEMCHANGED 某个项已经发生变化

    LVN_ITEMCHANGING 某个项目正在发生变化

    NM_KILLFOCUS 当视表列图控件失去焦点时产生

    LVN_KEYDOWN 某个键被按下

    LVN_MARQUEEBEGIN 开始某个边框选择

    NM_OUTOFMEMORY 当内存溢出时产生

    LVN_ODCACHEHINT 虚拟列表控件的显示区域的内容发生了变化

    LVN_ODSTATECHANGED 虚拟列表的控件的某个项或某个范围内的项已经发生变化

    LVN_ODFINDITEM 需要拥有者查找一个特定的回调项

    NM_RCLICK 当鼠标右键单击列表视图控件时产生

    NM_RDBLCLK 当鼠标右键双击列表视图控件时产生

    NM_SETFOCUS 当列表视图控件获得焦点时产生

    LVN_SETDISPINFO 父窗口必须更新控件为项所维护的信息

    注解:

    HDN:Header Notify
    LVN:ListView control Notify 
    NM:Notify Message
    TVN:TreeView control Notify

  • 相关阅读:
    服务器
    python的并发编程学习
    python的网络编程学习
    python的基础学习 模块
    pymysql基础操作
    查询简单练习
    数据准备
    数据库的三大设计范式
    数据库基础-建表约束
    mysql基础-基本语法
  • 原文地址:https://www.cnblogs.com/lpxblog/p/7144615.html
Copyright © 2011-2022 走看看