我有一个程序可以选择最小化到任务栏的通知区域。为了让它工作,我需要一种可靠的方法来检测用户何时最小化了应用程序。
如何在 C++ 应用程序中使用 Windows API 做到这一点?
我有一个程序可以选择最小化到任务栏的通知区域。为了让它工作,我需要一种可靠的方法来检测用户何时最小化了应用程序。
如何在 C++ 应用程序中使用 Windows API 做到这一点?
当用户最小化窗口时(使用标题栏上的框,或者通过从系统菜单中选择“最小化”选项),您的应用程序将收到一条WM_SYSCOMMAND
消息。该wParam
消息的参数将包含 value SC_MINIMIZE
,它指示正在请求的特定类型的系统命令。在这种情况下,您不关心lParam
.
因此,您需要设置一个消息映射来侦听设置为 的WM_SYSCOMMAND
消息。收到这样的消息后,您应该执行代码以最小化您的应用程序到任务栏通知区域,并返回 0(表示您已经处理了该消息)。wParam
SC_MINIMIZE
我不确定您使用的是什么 GUI 框架。对于不同的工具包,示例代码可能看起来非常不同。以下是您可能在直接 Win32 C 应用程序中使用的内容:
switch (message)
{
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_MINIMIZE)
{
// shrink the application to the notification area
// ...
return 0;
}
break;
}
您可以检查从 GetClientRect 返回的区域大小 - 如果为零,则最小化,适用于我,但可能不适用于所有情况。
我认为您正在寻找 WM_SIZE。当你得到这个时,检查 wParam 以获取细节。这是 MSDN 页面。
为了完整起见,还有GetWindowPlacement。窗口状态显示在WINDOWPLACEMENTshowCmd
结构的成员中,如果窗口被最小化,它的值为 2,或SW_SHOWMINIMIZED。
这就是IsIconic应该确定的,但它对我来说并不能始终如一地工作。(哦,为了确定这一点的一致方法......)