//获取窗口绘图DC句柄
HDC hDC=::GetDC(m_hWnd);
//创建与窗口绘图DC兼容的内存DC
HDC hMemDC=::CreateCompatibleDC(hDC);
//获取窗体客户区显示区域大小
CRect rcClient;
GetClientRect(rcClient);
//分配与窗体客户区显示区域大小相等的背景位图内存空间(绘图画布)
BITMAPINFO bitmapinfo;
bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biBitCount = 32;//32位位图支持alpha透明度
bitmapinfo.bmiHeader.biHeight = rcClient.Height();
bitmapinfo.bmiHeader.biWidth = rcClient.Width();
bitmapinfo.bmiHeader.biPlanes = 1;
bitmapinfo.bmiHeader.biCompression=BI_RGB;
bitmapinfo.bmiHeader.biXPelsPerMeter=0;
bitmapinfo.bmiHeader.biYPelsPerMeter=0;
bitmapinfo.bmiHeader.biClrUsed=0;
bitmapinfo.bmiHeader.biClrImportant=0;
bitmapinfo.bmiHeader.biSizeImage = bitmapinfo.bmiHeader.biWidth * bitmapinfo.bmiHeader.biHeight * bitmapinfo.bmiHeader.biBitCount / 8;
HBITMAP hBitmap=::CreateDIBSection (hMemDC,&bitmapinfo, 0,NULL, 0, 0);
//交换背景位图
HBITMAP hOldBitmap = (HBITMAP)::SelectObject (hMemDC,hBitmap);//开始画图操作,直接对hMemDC操作,就不要用hDC了
......//内存绘制好的图像更新到窗口
CPoint DestPt(0,0);
CSize psize(rcClient.Width(),rcClient.Height());
BLENDFUNCTION blendFunc32bpp;
blendFunc32bpp.AlphaFormat = AC_SRC_ALPHA;
blendFunc32bpp.BlendFlags = 0;
blendFunc32bpp.BlendOp = AC_SRC_OVER;
blendFunc32bpp.SourceConstantAlpha = 255;
::UpdateLayeredWindow(m_hWnd,hDC,NULL,&psize,hMemDC,&DestPt,0,&blendFunc32bpp,ULW_ALPHA);
//释放资源
::SelectObject (hMemDC,hOldBitmap);
::DeleteObject(hBitmap);
::DeleteDC(hMemDC);
::ReleaseDC(m_hWnd,hDC);
12-11
659
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)