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

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

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

  1. 自定义窗口非常敏感。
  2. 凉爽的玻璃resize效果,不同于标准窗口(认为它可能是与1强烈相关的副作用)

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

我不询问与小部件管理相关的内容,而是关于技术winapi技巧。

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

  1. 什么是“非常敏感”我不知道。 如果您的意思是窗口没有标准边框,则很容易实现:在创建WS_POPUP窗口时不要指定WS_BORDERWS_CAPTION 。 之后,您将不得不自己绘制边框和标题。 像往常一样处理WM_ERASEBKGNDWM_PAINT消息,绘制背景,菜单。
  2. 这种效果在我看来更像是一个bug。 它以这种方式发生:窗口resize,它获取WM_SIZE消息,处理它,Windows发送窗口忽略的WM_ERASEBKGND消息。 因此,系统在新窗口框架周围绘制新的阴影,该新窗口框架尚未填充新的窗口图像。 在这里,我们得到了这种很酷的玻璃效果:带有窗户空气阴影的下层窗户的旧图像。 您可以尝试禁用窗口阴影并查看此效果。

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

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