[GDI+]16位色下UpdateLayeredWindow失败

原帖:
《[GDI+]16位色下UpdateLayeredWindow失败》
http://topic.csdn.net/u/20070714/14/fe10617f-22ad-4cc0-9548-4e7f028b8516.html

 

远程桌面下UpdateLayeredWindow失败也是同样的问题。

 

整理成一个函数如下:

<textarea cols="50" rows="15" name="code" class="cpp">/* @ function : KCreateCompatibleBitmap @ brief : 用于解决GDI+ 16位色下UpdateLayeredWindow失败 @ parameter : rcClient @ return : 需要用DeleteObject来释放 @ remark : 一般情况下用CreateCompatibleBitmap来创建,但是这时候创建的Bitmap跟DC走了,是16位色的,这样就会丢失了Alpha通道 @ Date : 2009/11/4 14:45:32 by linyehui @*/ HBITMAP CDrawHelper::KCreateCompatibleBitmap(CRect&amp; rcClient) { BYTE * pBits ; BITMAPINFOHEADER bmih; ZeroMemory( &amp;bmih, sizeof(BITMAPINFOHEADER)); bmih.biSize = sizeof (BITMAPINFOHEADER) ; bmih.biWidth = rcClient.Width(); bmih.biHeight = rcClient.Height(); bmih.biPlanes = 1 ; bmih.biBitCount = 32; //这里一定要是32 bmih.biCompression = BI_RGB ; bmih.biSizeImage = 0 ; bmih.biXPelsPerMeter = 0 ; bmih.biYPelsPerMeter = 0 ; bmih.biClrUsed = 0 ; bmih.biClrImportant = 0 ; HBITMAP hBitMap = CreateDIBSection (NULL, (BITMAPINFO *) &amp;bmih, 0, (VOID**)&amp;pBits, NULL, 0) ; return hBitMap; }</textarea>

你可能感兴趣的:([GDI+]16位色下UpdateLayeredWindow失败)