zoukankan
html css js c++ java
利用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<m_Width * m_Height * 4;m+=4) *(pvBits+m)=(BYTE)m_iImageAlpha; HDC hdcScreen=::GetDC (m_hWnd); BOOL bRet =_UpdateLayeredWindow(m_hWnd, hdcScreen, &ptDst, &WndSize, hMemDC, &ptSrc, RGB(0,0,0), &blendPixelFunction, 2); //_ASSERT(bRet); // something was wrong.... // Delete used resources SelectObject(hMemDC,oldFont); SelectObject(hMemDC, hOriBmp); DeleteObject(hbitmap); DeleteDC(hMemDC); }
下载源码
查看全文
相关阅读:
SNOI 2019 字符串
1068: [SCOI2007]压缩
POJ 1848 Tree 树形DP
BZOJ bzoj1396 识别子串
BZOJ 4503: 两个串
BZOJ 2302: [HAOI2011]Problem c(数学+DP)
BZOJ 3157: 国王奇遇记 (数学)
CF_528D
BZOJ 3000: Big Number (数学)
新の开始
原文地址:https://www.cnblogs.com/nlsoft/p/2952681.html
最新文章
【BZOJ】1923 [Sdoi2010]外星千足虫(高斯消元)
【BZOJ】1013 [JSOI2008]球形空间产生器sphere(高斯消元)
【POJ】2480 Longge's problem(欧拉函数)
【BZOJ】4517 [Sdoi2016]排列计数(数学+错排公式)
【BZOJ】1101 [POI2007]Zap(莫比乌斯反演)
【BZOJ】1975 [Sdoi2010]魔法猪学院(A*)
【BZOJ】1085 [SCOI2005]骑士精神(IDA*)
【学习笔记】扩展中国剩余定理
【Codeforces】CF 165 E Compatible Numbers(状压dp)
【Codeforces】CF 8 C Looking for Order(状压dp)
热门文章
【Codeforces】CF 9 D How many trees?(dp)
【Codeforces】CF 5 C Longest Regular Bracket Sequence(dp)
【Codeforces】CF 2 B The least round way(dp)
【Codeforces】CF 467 C George and Job(dp)
【POJ】2420 A Star not a Tree?(模拟退火)
【Codeforces】CF 911 D. Inversion Counting(逆序对+思维)
【洛谷】P1357 花园(状压+矩阵快速幂)
【洛谷】P1641 [SCOI2010]生成字符串(思维+组合+逆元)
【BZOJ】1257: [CQOI2007]余数之和(除法分块)
【洛谷】P1341 无序字母对(欧拉回路)
Copyright © 2011-2022 走看看