我正在尝试创建一个具有圆角并且可以在水平和垂直方向上调整大小的 Win32 窗口。我的第一种方法是创建圆角矩形的 BITMAP 并将其绘制到屏幕上,同时将窗口样式设置为 WS_EX_LAYERED 并将透明度键设置为圆角矩形的外部颜色。
这行得通,但只有当窗口是固定大小时它才看起来不错。如果我允许用户调整窗口大小并同时拉伸位图,圆角看起来也被拉伸了。有没有办法创建一个具有漂亮、光滑圆角并且在窗口中可调整大小的窗口?最后,我还想在窗口中添加阴影。
我正在尝试创建一个具有圆角并且可以在水平和垂直方向上调整大小的 Win32 窗口。我的第一种方法是创建圆角矩形的 BITMAP 并将其绘制到屏幕上,同时将窗口样式设置为 WS_EX_LAYERED 并将透明度键设置为圆角矩形的外部颜色。
这行得通,但只有当窗口是固定大小时它才看起来不错。如果我允许用户调整窗口大小并同时拉伸位图,圆角看起来也被拉伸了。有没有办法创建一个具有漂亮、光滑圆角并且在窗口中可调整大小的窗口?最后,我还想在窗口中添加阴影。
我会尝试混合使用 Windows API 函数CreateRoundRectRgn和SetWindowRgn。可以在pInvoke.net 网站上找到一个非常简单的示例。
您可以创建一个没有任何框架的窗口,使用 WS_EX_LAYERED 获得透明度,然后在 WM_PAINT 中“通常”绘制包含自定义框架的窗口,或者您组成一个离屏位图并使用UpdateLayeredWindow
(后一种方法更有效)。
当然,您必须将绘制的内容调整为窗口的当前大小。通常,您将由不同的元素组成它 - 例如使用四个“角”位图(或椭圆函数)来绘制角,然后绘制边框等。
此外,您可以处理WM_NCHITTEST
将“标题”/“边框”/“角”功能(即移动和调整窗口大小)分配给窗口的任意区域。
而不是使用预先存在的位图绘制角落,您需要/需要以正确的形状绘制一个椭圆(或其他),然后将其合成到屏幕上。例如,您可以决定一个椭圆,每个半径都是该方向上窗口大小的 5%。