5

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

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

  1. 非常灵敏的自定义窗口。
  2. 酷炫的玻璃调整大小效果,不同于标准窗户(认为这可能是与 1 密切相关的副作用)

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

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

4

1 回答 1

6

基本上,你几乎可以用你的窗户做任何事情。但是大多数技巧都是手动实现的。

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

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

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

于 2013-03-10T17:35:48.493 回答