代码触发clistctrl控件的NM_CLICK事件
Posted lphwork
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码触发clistctrl控件的NM_CLICK事件相关的知识,希望对你有一定的参考价值。
首先,这是个比较简单的功能,也就是实现CListCtrl控件可以处理完当前行后自动换到下一行而且自已选中,思路很简单,先给CListCtrl控件添加个NM_CLICK事件响应函数,手动或者自动都行。
然后用代码选中需要显示的行,代码如下:
m_List.SetFocus()
m_List.SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
m_List.SetFocus()
m_List.SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
第一句需要添加,网上有的贴子写选中行时没有添加第一行,也就是没有设置焦点,这样第二句不会生效,也就是不会选中。
选中之后,剩下的就是给窗口发事件通知了,其实我们这个事件的过程是当用户手动点击了List控件的某一行时,控件知道自己被点击了,然后给父窗口发送事件通知,而父窗口收到通知后会查相应的事件响应,查找到对应的响应函数。所以,我们要做的就是模拟用户单击CListCtrl控件,给窗口发消息。
代码很简单,如下:
NMLISTVIEW nmListView;
nmListView.iItem = nItem; //告诉响应函数选中的是第几行,如果为-1则为不选中
nmListView.hdr.code = 事件类型(我们这里写NM_CLICK);
nmListView.hdr.idFrom = 控件ID; nmListView.hdr.hwndFrom = 控件自己的窗口句柄;
::SendMessage(响应的窗口句柄,WM_NOTIFY,NULL,(LPARAM)&nmListView);
NMLISTVIEW nmListView;
nmListView.iItem = nItem; //告诉响应函数选中的是第几行,如果为-1则为不选中
nmListView.hdr.code = 事件类型(我们这里写NM_CLICK);
nmListView.hdr.idFrom = 控件ID; nmListView.hdr.hwndFrom = 控件自己的窗口句柄;
::SendMessage(响应的窗口句柄,WM_NOTIFY,NULL,(LPARAM)&nmListView);
嗯嗯。很简单吧,虽然很简单,但还是发出来,给有需要的同学用用!!
本文出自 “西边太阳” 博客,请务必保留此出处http://thgenius.blog.51cto.com/1042803/1337542
以上是关于代码触发clistctrl控件的NM_CLICK事件的主要内容,如果未能解决你的问题,请参考以下文章
MFC使用ListControl时,第一次左键点击ListControl的列表时无法触发NM_CLICK消息,点击第二次时才能触发