Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 当父对象被单击时,获得wxWidgets弹出窗口的正确方法是什么?_User Interface_Popup_Wxwidgets - Fatal编程技术网

User interface 当父对象被单击时,获得wxWidgets弹出窗口的正确方法是什么?

User interface 当父对象被单击时,获得wxWidgets弹出窗口的正确方法是什么?,user-interface,popup,wxwidgets,User Interface,Popup,Wxwidgets,前言:Windows上的wxWidgets 2.8.10项目 我有一个主应用程序窗口(框架中的控件)。如果用户按下热键,将显示一个弹出窗口(实现为wxDialog),该窗口位于父对象的中心 我想要的行为是,如果用户在弹出窗口外单击父窗口,则弹出窗口将关闭,ala EndModal(wxID_CANCEL) 但是,如果用户在弹出窗口外单击进入另一个应用程序,弹出窗口应该保持在那里 有什么想法吗?如果您想在鼠标被按到屏幕区域之外时关闭对话框,您需要捕捉鼠标的点击。不幸的是,父窗体将不接收它们,因为它

前言:Windows上的wxWidgets 2.8.10项目

我有一个主应用程序窗口(框架中的控件)。如果用户按下热键,将显示一个弹出窗口(实现为wxDialog),该窗口位于父对象的中心

我想要的行为是,如果用户在弹出窗口外单击父窗口,则弹出窗口将关闭,ala EndModal(wxID_CANCEL)

但是,如果用户在弹出窗口外单击进入另一个应用程序,弹出窗口应该保持在那里


有什么想法吗?

如果您想在鼠标被按到屏幕区域之外时关闭对话框,您需要捕捉鼠标的点击。不幸的是,父窗体将不接收它们,因为它在显示模式对话框时被禁用。这是在系统级别发生的,因此不会有任何鼠标消息发送到应用程序中已禁用的窗口(实际上我的第一个想法是使用
wxApp::filterients()
,但由于这一点,它在这方面没有用)


一个想法是使用
CaptureMouse()
方法,该方法可用于将所有鼠标事件定向到具有捕获的窗口,即使鼠标光标位于其屏幕区域之外但位于应用程序的其他窗口上。

如何处理弹出窗口中的EVT\u KILL\u焦点?在窗口外单击将使单击的窗口接收焦点

“不幸的是,它将接收所有鼠标事件,无论它们是转到同一应用程序的另一个窗口,还是转到另一个应用程序的窗口。”CaptureMouse()不会阻止单击转到其他应用程序。当在另一个应用程序中单击时,鼠标捕获丢失(并且您会收到一条您必须处理的消息,否则wxWidgets会断言该消息)。@Adam:对,因此它可能确实值得研究。我知道捕获丢失事件,但没有建立心理联系,我将相应地编辑答案。谢谢你的评论。有没有办法告诉我,是因为点击了我应用程序中的另一个窗口,还是因为完全点击了另一个应用程序?有一个全局变量将当前的焦点窗口存储在某个地方。我在调试源代码时偶然发现了它。忘了它是什么,也忘了它是否可以公开访问。不管怎样,IsActive可能是更好的选择。处理EVT_KILL_FOCUS并使用wxApp::IsActive来判断是整个应用程序还是只是窗口失去了焦点。