是否有可能看到控制焦点丢失的位置?

时间:2016-01-22 12:03:53

标签: winapi mfc

我在对话框中有一个ClistCtrl(包装非MFC用户的Windows列表视图)。我设置的功能是,当列表失去焦点时,任何选定的项目都将被取消选择。

我还有一个"删除项目"按钮,其点击处理程序将删除列表中的任何选定项目。

您的想法是选择列表中的项目,然后单击按钮删除这些项目,或者单击其他位置并取消选择。

,当您点击删除按钮时,列表首先失去焦点 ,因此没有任何反应!有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以使用WM_KILLFOCUS接收有关失去焦点的消息,其wParam会为您提供一个窗口的句柄,该窗口有焦点:

  

wParam

     

接收键盘焦点的窗口的句柄。这个   参数可以为NULL。

您应该能够使用Spy ++在列表窗口中查看WM_KILLFOCUS,并阅读其wParam - 稍后也可以使用spy ++找到它的窗口。

答案 1 :(得分:2)

如其他帖子所述,您可以使用WM_KILLFOCUS

但我认为明确选择失去焦点是一个非常糟糕的主意

想象一下:用户使用multiselect选择一大堆项目(使用shift,ctrl,scrollbar ..),然后,会出现以下情况之一:

  • 电话响了,紧急电话 - 用户需要查收邮件:选择:不见了!

  • 弹出一个恼人的消息框,重点关注(是的,确实发生了):选择 - >走了。

你的用户可能会因此而讨厌你,所以不要这样做:)(即使listcontrol中只有3个项目也没有。)

通常的方法是在失去焦点时灰色选择。您可以添加“清除选择”按钮,但即使这样也不需要。只需点击一个项目即可清除选择(当然除了那一项)。

底线:永远不要清除失去焦点的选择。

<强>更新

如果在失去焦点时看不到选择,则LVS_SHOWSELALWAYS标志就是您所需要的:

  

LVS_SHOWSELALWAYS

     

即使控件没有显示,也会始终显示选择(如果有)   有重点。