Visual c++ CListCtrl-如何找到它是选中的

Visual c++ CListCtrl-如何找到它是选中的,visual-c++,mfc,clistctrl,Visual C++,Mfc,Clistctrl,我有一个CDialog类,其中有两个ClistCtrl类。 我想知道此时选择了哪个listCtrl。 例如,listCtrl A和B。即使我在A和B之间移动,假设我首先转到A并选择一行。然后,即使我转到B并在那个里选择一个项目,A中的项目仍然被选中,因为我不知道我已经进入了其他列表 任何建议,我如何找到它。如果您理解正确,您需要知道哪个列表框有焦点。您可以通过调用GetFocus(),返回指向焦点控件的指针 但是,您可能遇到的问题是,当您的对话框不是活动窗口时,焦点可能会在其他地方。在这种情况下

我有一个CDialog类,其中有两个ClistCtrl类。 我想知道此时选择了哪个listCtrl。 例如,listCtrl A和B。即使我在A和B之间移动,假设我首先转到A并选择一行。然后,即使我转到B并在那个里选择一个项目,A中的项目仍然被选中,因为我不知道我已经进入了其他列表


任何建议,我如何找到它。

如果您理解正确,您需要知道哪个列表框有焦点。您可以通过调用
GetFocus()
,返回指向焦点控件的指针


但是,您可能遇到的问题是,当您的对话框不是活动窗口时,焦点可能会在其他地方。在这种情况下,您应该跟踪
WM_SETFOCUS
WM_KILLFOCUS
消息,并记录最后激活的列表框。在MFC中,可以使用回调
CWnd::OnSetFocus
CWnd::OnKillFocus
来实现这一点。

我找到了一种方法。我可以在两个列表上注册NM_点击通知
选择列表A时,我将列表B的光标设置为-1,反之亦然。

请记住,用户也可以使用键盘激活控件,例如使用TAB键。在这种情况下,您的解决方案将不起作用。那么,有没有办法注册键盘通知?您可以做的一件事是子类
CListCtrl
并覆盖
OnSetFocus
OnKillFocus
。这将允许您跟踪键盘和鼠标事件。