【问题标题】:CListCtrl - how to find it is selectedCListCtrl - 如何找到它被选中
【发布时间】:2011-05-19 16:19:30
【问题描述】:

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

任何建议,我怎么能找到这个。

【问题讨论】:

    标签: visual-c++ mfc clistctrl


    【解决方案1】:

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

    您可能遇到的问题是当您的对话框不是活动窗口时,焦点将位于其他位置。在这种情况下,您应该跟踪WM_SETFOCUSWM_KILLFOCUS 消息并记录最后激活的列表框。在 MFC 中有回调 CWnd::OnSetFocusCWnd::OnKillFocus 可以用来实现这一点。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 请记住,用户也可以使用键盘激活控件,例如使用 TAB 键。在这种情况下,您的解决方案将不起作用。
      • 那么,有没有办法注册键盘通知?
      • 您可以做的一件事是继承CListCtrl 并覆盖OnSetFocusOnKillFocus。这将让您跟踪键盘和鼠标事件。
      猜你喜欢
      • 2010-10-02
      • 2013-05-10
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2020-01-20
      相关资源
      最近更新 更多