文章类型: VC&C++
关键词: CListCtrl,主要事件,鼠标响应函数,事件,函数
内容摘要: CListCtrl的主要事件及鼠标响应函数

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

2017/10/30 11:47:23    来源:apple    阅读:

主要事件:


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控件范围之内执行此事件就会产生该消息,而不一定要在有数据的列表项上面。

↑ 上一篇文章:浅谈契科夫的《第六病室》 关键词:浅谈,第六病室,疯子,医生,契科夫,小说,短篇小说,精选 发布日期:2017/10/29 16:06:44
↓ 下一篇文章:《跳来跳去的女人》读后感 关键词:跳来跳去的女人,契诃夫,小说,短篇小说,精选,读后感 发布日期:2017/11/1 14:10:13
相关文章:
函数用法CListCtrl::GetNextItem 关键词:函数用法CListCtrl::GetNextItem 发布日期:2017-01-05 11:00
如何理解.net下的委托和事件 关键词:.net,理解,委托,事件 发布日期:2015-07-28 12:14
C#的WinForm中回车键事件写法 关键词:C#,Winform,回车键,enter,事件,写法,KeyCode,KeyValue,13 发布日期:2016-01-26 21:05
相关目录:VC&C++软件开发
我要评论
正在加载评论信息......