我在对话框中有一个ClistCtrl
(包装非MFC用户的Windows列表视图)。我设置的功能是,当列表失去焦点时,任何选定的项目都将被取消选择。
我还有一个"删除项目"按钮,其点击处理程序将删除列表中的任何选定项目。
您的想法是选择列表中的项目,然后单击按钮删除这些项目,或者单击其他位置并取消选择。
但,当您点击删除按钮时,列表首先失去焦点 ,因此没有任何反应!有办法解决这个问题吗?
答案 0 :(得分:2)
您可以使用WM_KILLFOCUS接收有关失去焦点的消息,其wParam会为您提供一个窗口的句柄,该窗口有焦点:
wParam
接收键盘焦点的窗口的句柄。这个 参数可以为NULL。
您应该能够使用Spy ++在列表窗口中查看WM_KILLFOCUS,并阅读其wParam - 稍后也可以使用spy ++找到它的窗口。
答案 1 :(得分:2)
如其他帖子所述,您可以使用WM_KILLFOCUS
。
但我认为明确选择失去焦点是一个非常糟糕的主意。
想象一下:用户使用multiselect选择一大堆项目(使用shift,ctrl,scrollbar ..),然后,会出现以下情况之一:
电话响了,紧急电话 - 用户需要查收邮件:选择:不见了!
弹出一个恼人的消息框,重点关注(是的,确实发生了):选择 - >走了。
你的用户可能会因此而讨厌你,所以不要这样做:)(即使listcontrol中只有3个项目也没有。)
通常的方法是在失去焦点时灰色选择。您可以添加“清除选择”按钮,但即使这样也不需要。只需点击一个项目即可清除选择(当然除了那一项)。
底线:永远不要清除失去焦点的选择。
<强>更新强>:
如果在失去焦点时看不到选择,则LVS_SHOWSELALWAYS
标志就是您所需要的:
即使控件没有显示,也会始终显示选择(如果有) 有重点。