【发布时间】:2011-05-19 16:19:30
【问题描述】:
我有一个 CDialog 类,里面有两个 ClistCtrl 类。 我想找出当前选择了哪个listCtrl。 例如,listCtrl A 和 B。即使我在 A 和 B 之间移动,假设首先我去 A 并选择一行。然后,即使我去 B 并在那里选择一个项目,A 中的项目仍然被选中,因为我不知道我已经进入了其他列表。
任何建议,我怎么能找到这个。
【问题讨论】:
标签: visual-c++ mfc clistctrl
我有一个 CDialog 类,里面有两个 ClistCtrl 类。 我想找出当前选择了哪个listCtrl。 例如,listCtrl A 和 B。即使我在 A 和 B 之间移动,假设首先我去 A 并选择一行。然后,即使我去 B 并在那里选择一个项目,A 中的项目仍然被选中,因为我不知道我已经进入了其他列表。
任何建议,我怎么能找到这个。
【问题讨论】:
标签: visual-c++ mfc clistctrl
如果理解正确,您需要知道哪个列表框有焦点。你可以通过调用GetFocus() 来做到这一点,它会返回一个指向焦点控件的指针。
您可能遇到的问题是当您的对话框不是活动窗口时,焦点将位于其他位置。在这种情况下,您应该跟踪WM_SETFOCUS 和WM_KILLFOCUS 消息并记录最后激活的列表框。在 MFC 中有回调 CWnd::OnSetFocus 和 CWnd::OnKillFocus 可以用来实现这一点。
【讨论】:
我找到了一种方法。我可以在两个列表上注册 NM_Click 通知 选择列表A时,我将列表B的CURSEL设置为-1,反之亦然。
【讨论】:
CListCtrl 并覆盖OnSetFocus 和OnKillFocus。这将让您跟踪键盘和鼠标事件。