Winapi 是否有可能看到控制焦点丢失到哪里?
我在对话框上有一个Winapi 是否有可能看到控制焦点丢失到哪里?,winapi,mfc,Winapi,Mfc,我在对话框上有一个ClistCtrl(为非MFC用户包装Windows列表视图)。我设置的功能是,当列表失去焦点时,所有选定的项目都将取消选中 我还有一个“删除项目”按钮,它的点击处理程序将删除列表中的所有选定项目 您可以选择列表中的项目,然后单击按钮删除这些项目,或者单击其他位置取消选择 但是,当您单击“删除”按钮时,列表首先会失去焦点,因此不会发生任何事情!有办法解决这个问题吗?您可以通过接收有关失去焦点的消息,其wParam将为您提供一个获得焦点的窗口句柄: wParam 接收键盘焦点的窗
ClistCtrl
(为非MFC用户包装Windows列表视图)。我设置的功能是,当列表失去焦点时,所有选定的项目都将取消选中
我还有一个“删除项目”按钮,它的点击处理程序将删除列表中的所有选定项目
您可以选择列表中的项目,然后单击按钮删除这些项目,或者单击其他位置取消选择
但是,当您单击“删除”按钮时,列表首先会失去焦点,因此不会发生任何事情!有办法解决这个问题吗?您可以通过接收有关失去焦点的消息,其wParam将为您提供一个获得焦点的窗口句柄: wParam 接收键盘焦点的窗口的句柄。这 参数可以为NULL
您应该能够使用Spy++在列表窗口上查看WM_KILLFOCUS,并读取其wParam,然后再使用Spy++查找它是哪个窗口。您可以通过收到有关失去焦点的消息,其wParam将为您提供获得焦点的窗口的句柄: wParam 接收键盘焦点的窗口的句柄。这 参数可以为NULL
您应该能够使用Spy++在列表窗口上查看WM_KILLFOCUS,并读取其wParam,然后使用Spy++查找它是哪个窗口。如其他帖子所述,您可以使用
WM_KILLFOCUS
但我认为在失去焦点时清除选择是一个非常糟糕的主意
想象一下:用户使用multiselect(使用shift、ctrl、scrollbar…)选择一大堆项目,然后发生以下情况之一:
- 电话铃响,紧急呼叫-用户需要检查邮件:选择:消失
- 一个恼人的消息框弹出并聚焦(是的,它确实发生了):选择->消失
LVS\u SHOWSELALWAYS
标志:
选择(如果有)始终显示,即使控件未显示
集中注意力
正如在其他帖子中所说,您可以使用
WM_KILLFOCUS
来实现这一点
但我认为在失去焦点时清除选择是一个非常糟糕的主意
想象一下:用户使用multiselect(使用shift、ctrl、scrollbar…)选择一大堆项目,然后发生以下情况之一:
- 电话铃响,紧急呼叫-用户需要检查邮件:选择:消失
- 一个恼人的消息框弹出并聚焦(是的,它确实发生了):选择->消失
LVS\u SHOWSELALWAYS
标志:
选择(如果有)始终显示,即使控件未显示
集中注意力
WM_KILLFOCUS
告诉您输入焦点正在移动的窗口to@DavidHeffernan要在带有控件的CDialog上下文中捕捉到这一点,我需要实现PreTranslateMessage
或其他什么吗?一个代码示例将是一个非常好的答案,我总是忘记我可以和不能在message-map.Websearch中添加事件通知程序的内容how@DavidHeffernan到目前为止还没有。这就是我问的原因。我只是得到了一堆乱七八糟的结果。。。可能我的搜索词不太好。如果没有任何东西显示如何在MFC应用程序中捕获windows消息,我会感到惊讶。似乎难以置信。WM_KILLFOCUS
告诉您输入焦点正在移动哪个窗口to@DavidHeffernan要在带有控件的CDialog上下文中捕捉到这一点,我需要实现PreTranslateMessage
或其他什么吗?一个代码示例将是一个非常好的答案,我总是忘记我可以和不能在message-map.Websearch中添加事件通知程序的内容how@DavidHeffernan到目前为止还没有。这就是我问的原因。我只是得到了一堆乱七八糟的结果。。。可能我的搜索词不太好。如果没有任何东西显示如何在MFC应用程序中捕获windows消息,我会感到惊讶。似乎难以置信。这是否也与NOTIFY(NM\U KILLFOCUS,…)上的兼容?或者我应该问,MFC中的代码是什么样的?我是在对话框中捕捉WM_KILLFOCUS
并检查控件ID,还是在特定控件上设置处理程序?是的(NM_KILLFOCUS,
如果您想在对话框函数中接收给定控件的消息,应该可以使用。问题是,我看不到在哪里可以找到获得焦点的窗口()[pseudo]代码示例将使您的答案更完整?您是对的,这是通知无法完成的,您必须对列表控件进行子类化。也许其他人会建议如何进行。谢谢。我对此很熟悉,只是希望我不必麻烦。我无法捕获/截获/检查来自拨号盘的每个控件消息og那么,例如覆盖CWnd::PreTranslateMessage()
?这是否也与<