无法恢复最小化窗口

时间:2012-02-03 14:44:10

标签: c windows winapi

我正在使用本机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事件来操纵很多窗口是个好主意。该系统似乎触发了很多。另外,当我还在使用它时,我决定先检查窗口是否最小化。似乎系统正在继续检查位置变化,同时最小化。这显然使任务栏挂起了。它现在好多了,谢谢。强迫事情似乎不是一个好方法:/

1 个答案:

答案 0 :(得分:1)

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

现在回到正轨:\