如何在win32中创建一个带有圆角的可调整大小的窗口

时间:2010-02-04 16:27:03

标签: c++ winapi window rounded-corners resizable

我正在尝试创建一个具有圆角的Win32窗口,并且可以在水平和垂直方向上调整大小。我的第一种方法是创建一个圆角矩形的BITMAP并将其绘制到屏幕上,同时将窗口样式设置为WS_EX_LAYERED,并将透明度键设置为圆角矩形的外部颜色。

这样可行,但如果窗口是固定大小,它看起来不错。如果我允许用​​户调整窗口大小并随之拉伸位图,圆角也会显得很宽松。有没有办法创建一个窗口,有一个漂亮,光滑的圆角,并在窗口中可调整大小?最后,我还想在窗口中添加阴影。

3 个答案:

答案 0 :(得分:3)

我会尝试混合使用Windows API函数CreateRoundRectRgnSetWindowRgn。可以在pInvoke.net web site.

找到一个非常简单的示例

答案 1 :(得分:2)

您可以创建一个没有任何框架的窗口,使用WS_EX_LAYERED获取透明度,然后在WM_PAINT中“正常”绘制包含自定义框架的窗口,或者编写屏幕外位图,并使用UpdateLayeredWindow(后一种方法更有效率。)

当然,您必须将绘制的内容调整为窗口的当前大小。通常,您可以从不同的元素组成它 - 例如使用四个“角落”位图(或椭圆函数)绘制角点,然后绘制边框等。

此外,您可以处理WM_NCHITTEST将“标题”/“边框”/“角落”功能(即移动和调整窗口大小)分配到窗口的任意区域。

答案 2 :(得分:1)

不是使用预先存在的位图绘制角落,而是需要/需要绘制正确形状的椭圆(或其他),然后将其合成到屏幕。例如,您可能决定一个椭圆,每个半径为该方向窗口大小的5%。