如何检测应用程序何时最小化?

时间:2011-02-11 06:23:19

标签: c++ windows winapi minimize notification-area

我有一个程序,可以选择启用最小化任务栏的通知区域。为了实现这一点,我需要一种可靠的方法来检测用户何时最小化了应用程序。

如何在C ++应用程序中使用Windows API?

5 个答案:

答案 0 :(得分:4)

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

因此,您需要设置一个消息地图,以便在WM_SYSCOMMAND设置为wParam的情况下侦听SC_MINIMIZE消息。收到此类消息后,您应该执行代码以最小化您在任务栏通知区域的应用程序,并返回0(表示您已处理该消息)。

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

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

        return 0;
    }
    break;
}

答案 1 :(得分:0)

我认为您正在寻找WM_SIZE。获得此信息后,请检查wParam以获取详细信息。这是MSDN页面。

WM_SIZE

答案 2 :(得分:0)

您可以检查从GetClientRect返回的区域大小 - 如果为零,它最小化,适用于我,但可能无法在所有情况下工作。

答案 3 :(得分:0)

IsIconic应该确定的是什么,但它对我来说并不是一贯的。 (哦,以一致的方式来确定这个...)

答案 4 :(得分:0)

为完整起见,还有GetWindowPlacement。窗口状态显示在WINDOWPLACEMENT结构的showCmd成员中,如果窗口最小化,则其值为2,即 SW_SHOWMINIMIZED