如何使用winapi实现类似Steam的窗口?

Posted

技术标签:

【中文标题】如何使用winapi实现类似Steam的窗口?【英文标题】:How to achieve Steam-like window using winapi? 【发布时间】:2013-02-25 03:26:03 【问题描述】:

这是 Steam 客户端窗口正在调整大小的屏幕截图。

Steam 的客户端窗口有两个很酷的功能。

    响应速度非常快的自定义窗口。 很酷的玻璃调整大小效果,不同于标准窗口(认为这可能是与 1 密切相关的副作用)

假设我想使用 winapi 创建类似的窗口。我该怎么做?

我问的不是小部件管理相关的东西,而是技术 winapi 技巧。

【问题讨论】:

【参考方案1】:

基本上,您几乎可以对窗口执行任何操作。但是大部分技巧都是手动实现的。

    我不知道什么是“非常敏感”。如果你的意思是窗口没有标准边框,实现起来很容易:在创建WS_POPUP窗口时不要指定WS_BORDERWS_CAPTION。之后,您必须自己绘制边框和标题。处理WM_ERASEBKGNDWM_PAINT 消息,绘制背景,菜单,一切照常。 在我看来,这种效果更像是一个错误。它是这样发生的:窗口被调整大小,它得到一个WM_SIZE 消息,处理它,Windows 发送一个窗口忽略的WM_ERASEBKGND 消息。因此,系统在尚未填充新窗口图像的新窗口框架周围绘制新阴影。在这里,我们得到了这种很酷的玻璃效果:带有窗户航空阴影的底层窗户的旧图像。您可以尝试禁用 windows 阴影并查看此效果。

为了创建自定义大小调整边框,您可能会发现这些函数很有用:LoadCursorSetCursorMoveWindow

为了绘制自定义边框,您可以使用标准 GDI 函数。您还可以创建一些子窗口并将绘图委托给它们。这是winapi的基础。

【讨论】:

以上是关于如何使用winapi实现类似Steam的窗口?的主要内容,如果未能解决你的问题,请参考以下文章

WINAPI 光标在应用程序窗口上的点击位置

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

如何使用 WinAPI 在 C++ 中制作带有标签的旋转框的窗口

如何使用纯 WINAPI 在渐变背景上显示控件?

如何在标准按钮 WinApi 上绘图

如何使用 WinApi/user32.dll 或类似的东西远程执行 ListBox 的 ListBox1_DoubleClick 事件?