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

cub*_*l42 5 c c++ winapi resize steam

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

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

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

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

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

Ane*_*eri 6

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

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

为了创建一个自定义缩放边框,您可能会发现这些有用的功能:LoadCursor,SetCursor,MoveWindow.

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