rec*_*rec 30 mfc clistctrl visual-c++
我想在用户选择CListCtrl中的行时执行一些代码(报表视图,我不关心其他查看模式).
我如何抓住这个活动?是否有一些我可以映射的消息或像"OnSelectionChanged"这样的方法?
dje*_*dot 40
还试试:
BEGIN_MESSAGE_MAP(cDlgRun, CDialog)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST2, OnItemchangedList2)
END_MESSAGE_MAP()
/* ... */
void cDlgRun::OnItemchangedList2(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if ((pNMListView->uChanged & LVIF_STATE)
&& (pNMListView->uNewState & LVIS_SELECTED))
{
// do stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
小智 11
根据发生的情况,会有一些通知.
如果您正在选择项目但尚未选择任何内容,您将获得一个LVIF_STATE更改通知:uNewState和LVIS_SELECTED.新选择的项目将在以下位置找到:
pNMListView->iItem
Run Code Online (Sandbox Code Playgroud)
如果在选择新对象之前选择了某个项目,您将获得三个状态更改:
首先,您将被告知前一项焦点正在失去焦点:
pNMListView->uOldState & LVIS_FOCUSED
Run Code Online (Sandbox Code Playgroud)
然后,系统会通知您未选择旧项目:
pNMListView->uOldState & LVIS_SELECTED
Run Code Online (Sandbox Code Playgroud)
最后,您将获得新项目选择状态:
pNMListView->uNewState & LVIS_SELECTED
Run Code Online (Sandbox Code Playgroud)
(再次查看iItem新选择的项目)
因此,我们遇到的陷阱是,因为项目取消选择导致两个通知,我们做了很多重复,有时是有害的处理.我们最终做的只是对第二条消息进行此处理(pNMListView->uOldState & LVIS_SELECTED)
,并在丢失焦点通知后跳过相同的处理.
归档时间: |
|
查看次数: |
34662 次 |
最近记录: |