代码触发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

你可能感兴趣的:(mfc)