c - 用于重定向最小化动画的 Win32 C API

标签 c winapi redirect minimize

我已经看到 RocketDock 重定向了 Vista 中的最小化动画,因此 Windows 最小化到停靠栏,我很好奇这是如何完成的。实际的最小化动画是重定向到停靠栏,还是像钩子(Hook)一样阻止 Windows 最小化窗口并且 RocketDock 在窗口最小化时有自定义动画?

最佳答案

我正在开发一个名为“OpenMMT”的开源多显示器任务栏项目。我最近(通过许多令人头疼的事情)发现了如何实现这一点。

以下说明假定您知道如何使用 RegisterShellHookWindow。

在将接收 shell Hook 的窗口过程中,查找 HSHELL_GETMINRECT。

现在,从现在开始我遇到了问题。根据 MSDN,传递的 lparam 成员包含指向“SHELLHOOK”对象的指针。然而,这是真的,我无法让它工作,因为该结构的“rc”成员是一个 RECT,它与 Windows 头文件中的实际 RECT 结构不同。头文件中的 RECT 对其成员使用 LONG,就像这里一样,我们需要 SHORT。

无论如何,这是我如何实现这一目标的片段。

要定义的结构:

typedef struct {
  SHORT left;
  SHORT top;
  SHORT right;
  SHORT bottom;
} REALRECT, *LPREALRECT;

typedef struct {
  HWND hWnd; 
  REALRECT rc;
} DOCUMENT_ME_RIGHT_MICROSOFT, *LPDOCUMENT_ME_RIGHT_MICROSOFT;

然后在窗口过程中:

case HSHELL_GETMINRECT:
{
  LPDOCUMENT_ME_RIGHT_MICROSOFT lpShellHook = (LPDOCUMENT_ME_RIGHT_MICROSOFT)lParam;
  // lpShellHook now contains all the info. If you want to change the location
  // of the animation, simply change the lpShellHook->rc members to point
  // to the right coordinates and then return TRUE;
  return TRUE;
}

在最小化我的应用程序中的程序时,我遇到了一些情况,其中动画会默认返回到原始动画。我通过像这样最小化它们来解决这个问题:

void MinimizeApp(HWND hWnd) {
  SetForegroundWindow(hWnd);
  ShowWindowAsync(hWnd, SW_MINIMIZE);
}

如果您想了解有关我的项目的更多信息,或者只想查看源代码,请随时访问 https://github.com/Fafson/OpenMMT

关于c - 用于重定向最小化动画的 Win32 C API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998833/

相关文章:

javascript - 将查询字符串添加到 URL 重定向

c - 如何测试C中函数调用的顺序?

objective-c - 将 C 数组传递给 Objective-C 方法

c - 带字符串赋值的数组对象指针会导致崩溃

c - 表初始化因变量而失败

windows - 如何使Process Explorer的功能 'Replace Task Manager'?

ruby-on-rails - 如何使主页上的表单重定向回而不是它自己的 View

c++ - 如何在 C++ winapi 中获取事件文件资源管理器窗口的路径

c++ - 如何在将输出打印到cmd.exe后显示cmd提示符?

http - Nginx 将 HTTP 重写为 HTTPS 表示重定向循环?