我的应用程序应始终最小化到系统托盘,而不是任务栏。
为此,我处理 WM_SYSCOMMAND
/SC_MINIMIZE
:
case WM_SYSCOMMAND:
switch (wParam)
{
case SC_MINIMIZE:
minimizeToTray();
return FALSE;
...
但是,这不包括窗口在没有 WM_SYSCOMMAND
的情况下被最小化的事件。
例如:我可以使用Win+D
(显示桌面)最小化窗口。
为了涵盖这种情况,我处理 WM_ACTIVATE
/WA_INACTIVE
:
case WM_ACTIVATE:
{
if (LOWORD(wParam) == WA_INACTIVE && HIWORD(wParam) != 0)
{
minimizeToTray();
}
...
如果窗口在显示桌面之前处于事件状态,这似乎仅有效。
问题:
当窗口已经处于非事件状态时,没有 WM_ACTIVATE
进来检测最小化。哪条消息告诉我非事件窗口已最小化?
编辑:WM_WINDOWPOSCHANGED
似乎是检查窗口是否最小化(当它未处于事件状态时)的正确位置。
此外,当我激活其他一些最大化的应用程序时,完全覆盖我自己的应用程序,我也想最小化到托盘,但不知道在这种情况下是否有消息要处理。在这种情况下,WM_ACTIVATE
的 wParam
的高位字是 0
(就像窗口刚刚停用但仍然可见时一样) .
最佳答案
调用 IsIconic(hWnd) 获取当前状态。
https://stackoverflow.com/questions/59820519/
相关文章:
javascript - CSS 不透明度过渡不适用于 Safari
reactjs - 类型 'background' 上不存在属性 '{}' - React Rout
java - Slf4j,logback - 从 json 中删除 mdc 标签
git - 无法将 'core.repositoryformatversion' 设置为 '0'
kubernetes - 从一组副本中选择一个 kubernetes pod 来执行任务
vagrant 2.2.7 - 无法 vagrant up : default: Warning:
excel - 查找工作表中的总行数和列数 - Microsoft Graph