我怎样才能“关闭所有窗口”和“关闭” MFC中的各个窗口与Windows 7之间的区别?(How c

2019-10-20 01:14发布

我使用Visual Studio 2005与MFC和Windows 7。我有很多的对话窗口的应用程序。

我用OnSysCommand检查SC_CLOSE消息并检查lParam中,以确定这是否是从任务栏或对话框上的关闭按钮启动。 但我怎么能确定关闭消息是否被从任务栏显示“关闭所有窗口”,或从任务栏刚刚闭幕的个人对话?

谢谢

Answer 1:

我不认为你得到这个与单个消息解决。

当您关闭应用程序,你有如果关闭使用Alt + F4的消息看起来就像从任务栏关闭它相同的应用程序中的鼠标操作和Alt + F4之间也区分(看lParam的值)

你可以看一下这是用的GetMessage(最后输入消息)检索到的最后一条消息。 如果消息来自于任务栏是一个贴WM_SYSCOMMAND。 如果消息来自于内心收到WM_SYSCOMMAND作为SendMessage函数。

您可以使用AfxGetCurrentMessage,以确定哪些是最后输入消息。 如果你发现这里WM_SYSCOMMAND收盘来自任务栏。 如果您在这里找到一个键盘或鼠标消息的消息来形成用户输入。

提示:使用间谍++来研究这个问题。



Answer 2:

我认为你可以区分如下:

关闭使用系统菜单中的“关闭”一个窗口生成WM_SYSCOMMAND其中的wParam = SC_CLOSE和lParam!= 0。

闭使用Alt + F4键或“关闭所有窗口”既产生具有的wParam = SC_CLOSE和lParam = 0 WM_SYSCOMMAND窗口。

然而,Alt + F4键预先生成其中wParam = VK_F4一个WM_SYSKEYDOWN消息。

我想忽略“关闭所有窗口”,同时使用ALT + F4和“关闭”菜单。 因此,我抓住了ALT + F4在W​​M_SYSKEYDOWN并张贴了WM_CLOSE消息。 然后我忽略其中wParam = SC_CLOSE和lParam = 0的任何WM_SYSCOMMAND消息。



文章来源: How can I distinguish between “Close All Windows” and “Close” individual windows in MFC with Windows 7?