如何使用UpdateLayeredWindow

将WS_EX_LAYERED样式添加到窗口中。例如,可以通过调用CreateWindowEx完成此操作:

hWnd = CreateWindowEx(WS_EX_LAYERED,szWindowClass,szTitle,0,
         CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);

创建窗口后,我们将加载带有Alpha通道的PNG文件,并使用UpdateLayeredWindow使用PNG文件的Alpha通道作为窗口的透明度级别在窗口上呈现PNG。这样做如下:

//加载我们的PNG图
CImage img;
img.Load("circle.png");
//获取尺寸
int iWidth = img.GetWidth();
int iHeight = img.GetHeight();
//制作mem DC + mem位图
HDC hdcScreen = GetDC(NULL);
HDC hDC = CreateCompatibleDC(hdcScreen);
HBITMAP hBmp = CreateCompatibleBitmap(hdcScreen,iWidth,iHeight);
HBITMAP hBmpOld =(HBITMAP)SelectObject(hDC,hBmp);
//将图像绘制到内存DC

img.Draw(hDC,0,0,iWidth,iHeight,0,0,iWidth,iHeight);
//调用UpdateLayeredWindow
BLENDFUNCTION blend = {0};
blend.BlendOp = AC_SRC_OVER;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = AC_SRC_ALPHA;
POINT ptPos = {0, 0};
SIZE sizeWnd = {iWidth, iHeight};
POINT ptSrc = {0, 0};
UpdateLayeredWindow(hWnd, hdcScreen, &ptPos, &sizeWnd, hDC, &ptSrc, 0, &blend, ULW_ALPHA);
ShowWindow(hWnd, SW_SHOW);

SelectObject(hDC, hBmpOld);
DeleteObject(hBmp);
DeleteDC(hDC);
ReleaseDC(NULL, hdcScreen);
因为使用的是CImage,所以需要包含atlimage.h头文件。

 

SetLayerdWindowAttributs,它使整个窗口半透明或特定背景颜色透明

UpdateLayeredWindow可以使部分区域透明或半透明

 

https://docs.microsoft.com/en-us/previous-versions/ms997507(v=msdn.10)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值