2012-02-03 134 views
1

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

+0

如果你已经解决您的问题,您应该添加的溶液,作为一个答案,并接受它。 – 2012-02-03 19:57:59

+0

谢谢,我明天可以做到这一点。 – Chuck 2012-02-04 11:01:30

回答

1

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

我们重回正轨:\

相关问题