GDI如何设置透明背景,以及设置静态控件背景颜色

首先,要熟悉WS_EX_LAYERED的概念,它是设置透明背景的重要参数。

看代码:

	case WM_CREATE:
	{		
	    LONG Style = GetWindowLong(hWnd, GWL_EXSTYLE); //hWnd是主窗口句柄
	    SetWindowLong(hWnd, GWL_EXSTYLE, Style | WS_EX_LAYERED);
	    SetLayeredWindowAttributes(hWnd, 0, 0, LWA_ALPHA);
	}

GetWindowLong的作用是获取主窗口的样式,SetWindowLong是重新设置主窗口的样式,并在基础上添加了WS_EX_LAYERED样式,SetLayeredWindowAttributes函数是设置分层窗口的不透明度和透明度颜色键。

看函数原型:

BOOL SetLayeredWindowAttributes(
  HWND     hwnd,
  COLORREF crKey,
  BYTE     bAlpha,
  DWORD    dwFlags
);

 

我们只需关注第三个和第四个参数就行,因为我们需要设置透明窗口,则最后一个参数为LWA_ALPHA,第三个参数则是设置透明度,范围是0-255,具体效果可以自己试验看。

下面说如何设置静态控件的背景颜色

先说如何创建一个静态控件,参考下面代码:

HWND static_hwnd = CreateWindow(L"STATIC",
	   L"Title",
	   WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS,
	   500, 500, 200, 50,
	   hWnd,
	   NULL,
	   NULL,
	   NULL);

那么静态控件创建好了,开始设置控件背景颜色

case WM_CTLCOLORSTATIC:
{
    HDC hdcStatic = (HDC)wParam;
    SetTextColor(hdcStatic, RGB(255, 255, 255));   //设置文字颜色
    SetBkColor(hdcStatic, RGB(255, 0, 0));//设置文字背景颜色
    SetBkMode(hdcStatic, TRANSPARENT);//设置控件背景为透明
    return (INT_PTR)CreateSolidBrush(RGB(96, 96, 96));//设置控件背景颜色为灰色
}

既然说到背景颜色,再说一下主窗口的背景颜色设置

第一种,在注册类里面直接更改

HBRUSH hBrush = ::CreateSolidBrush(RGB(0, 0, 255));
wcex.hbrBackground  = hBrush;

 

第二种,在WM_ERASEBKGND事件里面更改

case WM_ERASEBKGND:
{
    HBRUSH brush;
    RECT rect;
    brush = CreateSolidBrush(RGB(255, 0, 255));
    SelectObject((HDC)wParam, brush);
    GetClientRect(hWnd, &rect);
    Rectangle((HDC)wParam, rect.left, rect.top, rect.right, rect.bottom);
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值