- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道在 Windows 通知消息中,WM_CLOSE 指的是通过窗口右上角的“X”按钮关闭窗口。
有谁知道用 File->Exit 关闭的通知消息?
我问的原因是因为我正在尝试实现 JNI native 代码以在用户启动系统关闭时优雅地关闭窗口。请参阅我之前的帖子 ( Winapi - SetWindowLongPtr in ShutdownBlockReasonCreate / Destroy implementation of JNI native code ) 了解背景。
单击“X”关闭时,会出现确认对话框,防止关闭原因消息消失(当我希望它在一段时间后消失时)。我知道 File->Exit from menu bar 不要求确认,但我如何使用 Windows 通知消息实现它?
在深入研究之后,我发现的唯一建议是使用 DestroyWindow。所以我尝试使用 DestroyWindow() 函数关闭窗口,但它只是“销毁”窗口,而不是结束整个应用程序。这是我的 WndProc CallBack 函数中的 switch 语句:
switch (message) {
case WM_QUERYENDSESSION:
PostMessage(hWnd, WM_CLOSE, 0, 0);
return 0;
case WM_ENDSESSION:
PostMessage(hWnd, WM_CLOSE, 0, 0);
return 0;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_NCDESTROY:
RemoveWindowSubclass(hWnd, AppWndProc, uIdSubclass);
break;
}
如有任何帮助,我们将不胜感激!
干杯
最佳答案
I know with Windows notification message, WM_CLOSE refers to closing the window via "X" button on the top right hand corner of the window.
实际上,当窗口的标准“X”按钮被点击时(或者窗口左上角菜单上的标准“关闭”项被选中,如果启用的话,或者窗口接收到 ALT+F4 keystroke),WM_SYSCOMMAND
消息被发送到窗口,其中 wParam
包含 SC_CLOSE
标志。如果该消息被传递给 DefWindowProc()
(默认行为),它会向窗口发出一个 WM_CLOSE
消息。
参见 Closing the Window .
其他情况也可能导致发出 WM_CLOSE
消息。
Does anyone know the notification message for closing with File->Exit?
当选择该菜单项时会发生什么是由应用程序定义的,而不是操作系统。应用程序可以做任何它想做的事情,包括如果它想立即销毁窗口。
但是,话虽这么说,如果菜单是标准的 Win32 菜单,那么窗口将收到一条 WM_COMMAND
消息,其中至少包含所选菜单项的 ID。
The reason I asked is because I'm trying to implement JNI native code to gracefully close window when user initiated system shutdown.
默认情况下,您不需要为此做任何事情。操作系统在系统关闭期间自动关闭所有打开的窗口。如果您需要清理任何资源,而不是手动关闭窗口,您应该对关闭的窗口使用react。
When clicking on 'X' to close, confirmation dialog box comes up which prevents shutdown reason message from disappearing (when I expect it to disappear after a while).
然后应用程序没有正确处理系统关闭。
大多数应用程序都会在收到 WM_CLOSE
消息时显示这样的确认框。如果确认中止,应用程序将丢弃该消息并继续前进。但是,应用程序不应在系统关闭期间提示用户进行确认。但并非所有应用程序都遵循该规则。
I know File->Exit from menu bar doesn't ask for confirmation
同样,这是由应用程序决定的,而不是操作系统。
how do I implement this using windows notification message? After some digging around the only suggestions I found is to use DestroyWindow.
正确。或者,您也可以将 WM_QUIT
消息发布到消息队列。请参阅 PostQuitMessage()
函数。
So I tried closing the window using DestroyWindow() function, but it only "Destroys" the window, rather than ending the whole application.
应用程序有责任自行终止,通常是在主窗口被销毁时退出消息循环。
Here's my switch statement in my WndProc CallBack function:
无需发布 WM_CLOSE
以响应 WM_QUERYENDSESSION
或 WM_ENDSESSION
。让操作系统为您处理。
如果您不希望在系统关闭期间出现确认,请将您的代码更改为更像这样的内容:
bool shuttingDown = false;
LRESULT CALLBACK AppWndProc(
_In_ HWND hWnd,
_In_ UINT message,
_In_ WPARAM wParam,
_In_ LPARAM lParam,
_In_ UINT_PTR uIdSubclass,
_In_ DWORD_PTR dwRefData
) {
switch (message) {
case WM_QUERYENDSESSION:
shuttingDown = true;
break;
case WM_ENDSESSION:
if (wParam == FALSE)
shuttingDown = false;
break;
case WM_CLOSE:
if (shuttingDown) {
DestroyWindow(hWnd);
// or:
// PostQuitMessage(0);
return 0;
}
break;
case WM_NCDESTROY:
RemoveWindowSubclass(hWnd, AppWndProc, uIdSubclass);
break;
}
return DefSubclassProc(hWnd, message, wParam, lParam);
}
关于c++ - Winapi - WM_CLOSE 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59675754/
我正在为自定义对话框使用特殊的消息循环。当对话框打开并且窗口关闭时,我想达到下面的第二个 if(msg.message == WM_CLOSE)。 for(;;) { if(PeekMessa
本文对WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数的功能及区别做出了分析比对,有助于读者更好的对消息投递函数加以理解。详情如下: 1、WM_CLOSE、WM_DEST
我正在创建一个简单的 C# 应用程序来监视服务器上的公开应用程序,如果有任何消息框出现一个特定的窗口名称,则关闭该窗口并继续该过程。供应商随机出现信息消息框,它会挂起应用程序,直到单击 X 或 OK
我将子 hwnd 创建为带有关闭按钮的弹出窗口,并使用 WndchildProc 来处理来自子窗口的消息 m_childHwnd = CreateWindowEx( NULL, TEXT("STATI
我想“保护”某个窗口不被关闭。所以我想 Hook WM_CLOSE、WM_DESTOY 或 WM_QUIT。这就是我尝试这样做的: LRESULT CALLBACK WindowHookProc(in
我正在尝试从 C++ 应用程序关闭 C# .NET 4 WPF 应用程序。 C++ 应用程序使用枚举窗口的标准技术,找到对应于给定进程 ID 的窗口,通过 PostMessage 向窗口发送 WM_C
我知道在 Windows 通知消息中,WM_CLOSE 指的是通过窗口右上角的“X”按钮关闭窗口。 有谁知道用 File->Exit 关闭的通知消息? 我问的原因是因为我正在尝试实现 JNI nati
如何编写一个 WinForms 应用程序,它除了托盘图标外没有任何可见元素,同时允许该应用程序在文件正在使用时由 Windows Installer 关闭?据我了解,Windows Installer
当模态对话框处于事件状态时,主应用程序窗口是否可以检测到 WM_CLOSE 事件?。如果没有,是否有任何方法可以检测到 WM_CLOSE 事件,因为对话框的事件处理程序也没有检测到它。 要亲自观察此行
开始一个进程- ProcessStartInfo psi = new ProcessStartInfo("G:\\SampleWinApp.exe"); psi.UseShe
我有一个调用我的应用程序的外部应用程序,应该在工作完成后结束它。来自此外部应用程序的日志声称它在我的应用程序上使用了 WM_CLOSE。 如何在我的应用程序中截取 WM_CLOSE 消息来执行一些清理
我正在使用 Tray 应用程序。 Onj FormCloseQuery 我检查程序是否应该转到托盘,而不是关闭它,而是将其放入托盘中(CanClose := False) 但是,如果 Windows
我只想知道这两个消息常量有什么区别。覆盖时,我应该在 WndProc 方法中使用哪一个来处理关闭按钮消息。 最佳答案 WM_CLOSE无论何时以任何方式请求关闭窗口,都会作为窗口消息发送。 SC_CL
我只想知道这两个消息常量有什么区别。覆盖时,我应该在 WndProc 方法中使用哪一个来处理关闭按钮消息。 最佳答案 WM_CLOSE无论何时以任何方式请求关闭窗口,都会作为窗口消息发送。 SC_CL
当我使用 DialogBox 创建对话框时, 它不会关闭,除非我在我自己的 DLGPROC 函数中处理 WM_CLOSE 并调用 EndDialog。 我知道这是设计使然,但我很感兴趣为什么选择 WM
我创建了简单的 handler inside my QApplication : bool QtMyApplication::winEventFilter ( MSG * msg, long * re
我有一个基于对话框的 MFC 应用程序,它需要停止 Windows Wifi 服务才能正常运行,但我想在我的应用程序退出时再次启用它。 所以我想我应该将重启服务的代码放在主对话框类的析构函数中。 现在
我正在调用 HtmlHelpA winapi 方法来显示我的应用程序的 .chm。此方法立即返回一个 HWND,并且帮助窗口显示为一个单独的窗口。 除了窗口,我还为这个 hwnd 设置了一个计时器。我
尝试在 Windows 7 的任务栏缩略图中使用关闭按钮关闭窗口时尝试设置“你想保存吗”对话框(启用 aero peek)。 在处理 WM_CLOSE 时使用 MessageBox() 不起作用。 M
我们有一个遗留的 C Windows 应用程序,它在发生致命连接错误时通过 MessageBox 调用弹出一个模式窗口。我们的网络工程师可能同时运行其中的许多应用程序。有时,网络故障会导致这些应用程序
我是一名优秀的程序员,十分优秀!