【发布时间】: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 事件来操作大量窗口是否是个好主意。该系统似乎触发了很多。此外,当我仍在使用它时,我决定先检查窗口是否最小化。似乎系统在最小化的同时继续检查位置变化。这显然是使任务栏挂起的原因。现在效果好多了,谢谢。强迫事情似乎也不是什么好方法:/
【问题讨论】:
-
如果您已经解决了您的问题,您应该添加解决方案作为答案并接受它。
-
谢谢,我明天就可以了。