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