6

我有一个程序可以选择最小化到任务栏的通知区域。为了让它工作,我需要一种可靠的方法来检测用户何时最小化了应用程序。

如何在 C++ 应用程序中使用 Windows API 做到这一点?

4

5 回答 5

6

当用户最小化窗口时(使用标题栏上的框,或者通过从系统菜单中选择“最小化”选项),您的应用程序将收到一条WM_SYSCOMMAND消息。该wParam消息的参数将包含 value SC_MINIMIZE,它指示正在请求的特定类型的系统命令。在这种情况下,您不关心lParam.

因此,您需要设置一个消息映射来侦听设置为 的WM_SYSCOMMAND消息。收到这样的消息后,您应该执行代码以最小化您的应用程序到任务栏通知区域,并返回 0(表示您已经处理了该消息)。wParamSC_MINIMIZE

我不确定您使用的是什么 GUI 框架。对于不同的工具包,示例代码可能看起来非常不同。以下是您可能在直接 Win32 C 应用程序中使用的内容:

switch (message)
{
case WM_SYSCOMMAND:
    if ((wParam & 0xFFF0) == SC_MINIMIZE)
    {
        // shrink the application to the notification area
        // ...

        return 0;
    }
    break;
}
于 2011-02-11T06:50:33.583 回答
0

您可以检查从 GetClientRect 返回的区域大小 - 如果为零,则最小化,适用于我,但可能不适用于所有情况。

于 2013-07-27T08:34:01.857 回答
0

我认为您正在寻找 WM_SIZE。当你得到这个时,检查 wParam 以获取细节。这是 MSDN 页面。

WM_SIZE

于 2011-02-11T06:30:12.097 回答
0

为了完整起见,还有GetWindowPlacement。窗口状态显示在WINDOWPLACEMENTshowCmd结构的成员中,如果窗口被最小化,它的值为 2,或SW_SHOWMINIMIZED

于 2020-07-21T10:24:38.907 回答
0

这就是IsIconic应该确定的,但它对我来说并不能始终如一地工作。(哦,为了确定这一点的一致方法......)

于 2017-08-15T18:13:17.123 回答