欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);


大功告成,效果图如下:
WTL 绘制 圆角对话框 自绘对话框