利用UpdateLayeredWindow函数制作透明窗口时BMP的Alpha通道的问题

void CDigitalClock::Update() { // Create the alpha blending bitmap BITMAPINFO bmi; // bitmap header ZeroMemory(&bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = m_Width; bmi.bmiHeader.biHeight = m_Height; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; // four 8-bit components bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = m_Width * m_Height * 4; BYTE *pvBits; // pointer to DIB section HBITMAP hbitmap = CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, (void **)&pvBits, NULL, 0); ZeroMemory(pvBits, bmi.bmiHeader.biSizeImage); HDC hMemDC = CreateCompatibleDC(GetDC(m_hWnd)); HBITMAP hOriBmp = (HBITMAP)SelectObject(hMemDC, hbitmap); HFONT *oldFont=NULL; static char str_time[10]={""}; CTime t=CTime::GetCurrentTime(); sprintf(str_time,"%02d:%02d.%02d", t.GetHour(),t.GetMinute(),t.GetSecond()); CRect rt; GetClientRect(m_hWnd, &rt); oldFont = (HFONT*)SelectObject(hMemDC,g_this->GetFont()); SetBkColor(hMemDC,RGB(0,0,0)); SetBkMode(hMemDC,TRANSPARENT); GetClientRect(m_hWnd, &rt); FillRect(hMemDC,&rt,CBrush(RGB(128,128,128))); SetTextColor(hMemDC,RGB(255,255,255)); DrawText(hMemDC, str_time,strlen(str_time), &rt, DT_CENTER|DT_VCENTER|DT_SINGLELINE); GetWindowRect(m_hWnd,rt); POINT ptDst = {rt.left,rt.top}; POINT ptSrc = {0, 0}; SIZE WndSize = {m_Width, m_Height}; //ULW_COLORKEY 1 ULW_ALPHA 2 ULW_OPAQUE 4 //AC_SRC_OVER 0 AC_SRC_ALPHA 1 BLENDFUNCTION blendPixelFunction={AC_SRC_OVER, 0, m_iSourceConstantAlpha,AC_SRC_ALPHA }; //在这里设置BMP的Alpha值 //内存中的数据格式为 RR GG BB AL for(int m=3;m
下载源码

转载于:https://www.cnblogs.com/nlsoft/archive/2013/03/10/2952681.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值