【问题标题】:Cannot restore minimized window无法恢复最小化窗口
【发布时间】:2012-02-03 14:44:10
【问题描述】:

我正在使用本机 C 和 win32 API 开发应用程序框架。根据用户操作编写用于将拥有的窗口放置在框架内的处理程序。到目前为止,我有:

case WM_WINDOWPOSCHANGED:

    GetWindowRect(hwnd, &rect);
    SetWindowPos(
        hexp, HWND_TOP, rect.left + 5, rect.top + 30,
            0, 0, SWP_SHOWWINDOW | SWP_NOSIZE );

效果很好,只是我似乎无法从最小化状态恢复它。我搜索了论坛并使用 SC_RESTORE 处理程序尝试了几件事,包括:

case SC_RESTORE:

    ShowWindow(hwnd, SW_RESTORE);
    SetForegroundWindow(hwnd);
    BringWindowToTop(hwnd);    // Doesn't work

我也试过了:

case SC_RESTORE:

    SendMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);    // no luck either

似乎没有任何效果。我现在必须在应用程序最小化时右键单击并选择恢复。任何线索都将受到欢迎。

** 更新** 我发现了一个改进。

首先不确定使用 WM_WINDOWPOSCHANGED 事件来操作大量窗口是否是个好主意。该系统似乎触发了很多。此外,当我仍在使用它时,我决定先检查窗口是否最小化。似乎系统在最小化的同时继续检查位置变化。这显然是使任务栏挂起的原因。现在效果好多了,谢谢。强迫事情似乎也不是什么好方法:/

【问题讨论】:

  • 如果您已经解决了您的问题,您应该添加解决方案作为答案并接受它。
  • 谢谢,我明天就可以了。

标签: c windows winapi


【解决方案1】:

我想知道我们是否可以回答自己的问题。好吧,我从来没有用 API 接触过 C,看起来我是从一个“错误”的概念开始的。我以为我要写一个拥有和管理窗口的框架,结果操作系统告诉我要迷路。似乎整个事情正在进入“空闲模式”并挂在任务栏上。然后我意识到已经有可以管理的窗口。它们被称为“对话”。所以我将停止尝试将窗口粘合在一起并使用适当的对话框。这是一条有趣的实验路径。请花点时间回答新手问题。那么现在您知道如果您的窗口挂在任务栏上,“Windows”会丢弃它并且它永远不会回来。

现在回到正轨:\

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多