如何使用winapi实现类似蒸汽的窗口?
这是Steam调整客户端窗口大小的屏幕截图。
Steam的客户端窗口有两个很酷的function。
- 自定义窗口非常敏感。
- 凉爽的玻璃resize效果,不同于标准窗口(认为它可能是与1强烈相关的副作用)
假设我想用winapi创建类似的窗口。 我该怎么做?
我不询问与小部件管理相关的内容,而是关于技术winapi技巧。
基本上,你几乎可以用你的窗户做任何事情。 但大多数技巧都是手动实现的。
- 什么是“非常敏感”我不知道。 如果您的意思是窗口没有标准边框,则很容易实现:在创建
WS_POPUP
窗口时不要指定WS_BORDER
和WS_CAPTION
。 之后,您将不得不自己绘制边框和标题。 像往常一样处理WM_ERASEBKGND
和WM_PAINT
消息,绘制背景,菜单。 - 这种效果在我看来更像是一个bug。 它以这种方式发生:窗口resize,它获取
WM_SIZE
消息,处理它,Windows发送窗口忽略的WM_ERASEBKGND
消息。 因此,系统在新窗口框架周围绘制新的阴影,该新窗口框架尚未填充新的窗口图像。 在这里,我们得到了这种很酷的玻璃效果:带有窗户空气阴影的下层窗户的旧图像。 您可以尝试禁用窗口阴影并查看此效果。
为了创建自定义的大小调整边框,您可能会发现这些函数很有用: LoadCursor
, SetCursor
, MoveWindow
。
为了绘制自定义边框,您可以使用标准GDI函数。 您还可以创建一些子窗口并将绘图委托给它们。 这是winapi的基础知识。