WTL 绘制 圆角对话框 自绘对话框
程序员文章站
2022-03-10 22:43:38
...
主要思路:
先把对话框设为透明,再画一个圆角矩形
具体代码:
1.设置透明,在OnInitDialog添加如下代码。
关于SetLayeredWindowAttributes函数的具体使用方法,可参照:
WTL 设置窗口透明 SetLayeredWindowAttributes使用方法
LONG nExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);
nExStyle |= WS_EX_LAYERED;
::SetWindowLong(m_hWnd, GWL_EXSTYLE, nExStyle);
SetLayeredWindowAttributes(m_hWnd, TRANSPARENT_BACKGROUND_COLOR, 128, LWA_COLORKEY);
此处的 TRANSPARENT_BACKGROUND_COLOR 是一个自定义颜色,用来透明,不能与对话框需要显示的颜色相同 ,可以如下定义:
#define TRANSPARENT_BACKGROUND_COLOR RGB(254,253,252)
2.用透明色(即TRANSPARENT_BACKGROUND_COLOR )填满整个窗口
在OnPaint中添加如下代码:
CPaintDC dc(m_hWnd);
CRect dlgRect;
GetWindowRect(dlgRect);
CBrush Backbr;
HBRUSH hBackbr = Backbr.CreateSolidBrush(TRANSPARENT_BACKGROUND_COLOR);
CRect allRect(0,0,dlgRect.Width(),dlgRect.Height()); //用于绘制上方白色背景
dc.FillRect(&allRect,Backbr);
此时整个窗口都是透明的了。
3.绘制圆角矩形
在OnPaint中添加如下代码:
CBrush br;
HBRUSH hbr = br.CreateSolidBrush(RGB(255,0,0)); //红色背景
dc.SelectBrush(hbr);
CPen pen;
HPEN hpen = pen.CreatePen(PS_SOLID,1,RGB(0,255,0));//绿色边线
dc.SelectPen(hpen);
dc.RoundRect(0,0,dlgRect.Width(),dlgRect.Height(),30,30);
大功告成,效果图如下:
上一篇: jQuery实现小米购物车功能案例
下一篇: jQuery实现悬浮显示效果
推荐阅读