• CListCtrl的主要事件及鼠标响应函数


    主要事件:

    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

    例如:

    LVN_ITEMCHANGED事件消息的处理

    在。cpp中找到下面两段,在它们之间添加加粗的那一句,第三个参数是函数名,可以自己随意写,

    BEGIN_MESSAGE_MAP()

                    ON_NOTIFY(LVN_ITEMCHANGED,   IDC_LIST1,   OnItemchangedList1);

    END_MESSAGE_MAP()

    在。h中添加  afx_msg void OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)这一句,算是函数声明。

    在。cpp中添加函数:

    void C***Dlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

    if(pNMListView->uChanged==LVIF_STATE)
    {
    if(pNMListView->uNewState & LVIS_SELECTED)
       {
        //处理内容
        int nItem=pNMListView->iItem;
        CString value[6];
        for(int i=0;i<6;i++)
        {
         value[i]=m_List.GetItemText(nItem,i);
        }
       }
    }

    *pResult = 0;
    }

    消息处理函数中的两个if条件句一定要有,否则可能出现多次进入处理内容的问题。

    鼠标双击列表项事件的处理

    响应NM_DBLCLK消息:

    void CDisSalaryDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW *pNMListView=(NM_LISTVIEW *)pNMHDR;

    int nItem=pNMListView->iItem;
    if(nItem>=0 && nItem<m_List.GetItemCount())            //判断双击位置是否在有数据的列表项上面
    {
        .............
    }

    *pResult = 0;
    }

    消息处理函数中的if语句很重要,用于判断双击位置是否在有数据的列表项上面。因为NM_DBLCLK消息是CListCtrl控件(整体)消息,只要是在CListCtrl控件范围之内执行此事件就会产生该消息,而不一定要在有数据的列表项上面。

  • 相关阅读:
    【探路者】团队Alpha周贡献分数分配结果
    2017秋-软件工程第七次作业-第八周例行总结
    2017秋-软件工程第七次作业(2)-【探路者】Alpha周(2017年10月19)贡献分配规则和分配结果
    2017秋-软件工程第七次作业(1)-【探路者】贪吃蛇阿尔法发布展示(视频展示)
    2017秋-软件工程第七次作业(1)-【探路者】贪吃蛇阿尔法发布
    名词1
    Jsp1
    代码,python1
    关于键盘
    代码,java_web
  • 原文地址:https://www.cnblogs.com/WinkJie/p/16247498.html
Copyright © 2020-2023  润新知