新人求解,GDI绘制变成半透明 鼠标穿透求解。
首先是背景黑色的 显示正确
然后是在半黑半白色的背景 就出现不同颜色了
现在是背景全白的样子 图片也全部白色了。。。。
各种背景颜色测试后 得出 图片跟随背景颜色改变。。。
问题:
这是大概什么原因呢? 而且鼠标还会穿透 但是我没有设置它可以穿透的
int EXSTYLE = GetWindowLong(Hwnd, GWL_EXSTYLE);
SetWindowLong(Hwnd, GWL_EXSTYLE, EXSTYLE | WS_EX_LAYERED);
//初始化窗口风格
TempHdc = GetDC(Hwnd);
Hdc = CreateCompatibleDC(TempHdc);
//创建Hdc
BITMAPINFO BMI = new BITMAPINFO();
BMI.bmiHeader.biSize = 40;
BMI.bmiHeader.biWidth = Size .cx ;
BMI.bmiHeader.biHeight = Size.cy;
BMI.bmiHeader.biPlanes = 1;
BMI.bmiHeader.biBitCount = 32;
BMI.bmiHeader.biSizeImage = BMI.bmiHeader.biWidth * BMI.bmiHeader.biHeight * 32 / 8;
hDIB = CreateDIBSection(Hdc,ref BMI,0,0,0,0);
SelectObject(Hdc, hDIB);
这是DIB的申明
BLENDFUNCTION TempBlend = new BLENDFUNCTION();
TempBlend.AlphaFormat = 1;
TempBlend.BlendFlags = 0;
TempBlend.BlendOp = 0;
TempBlend.SourceConstantAlpha = Alpha;
bool a = UpdateLayeredWindow(Hwnd, 0, ref Point, ref Size, Hdc, ref TempPoint, 0, ref TempBlend, 2);
这是Blend的申明 其中Alpha=255
IntPtr khb = CreatePen(5, 0, 0);
IntPtr open = SelectObject(Hdc , khb);
IntPtr brush = CreateSolidBrush(Color);
IntPtr obrush = SelectObject(Hdc , brush);
Rectangle(Hdc, x, y, Widht , hegith );
SelectObject(Hdc, open);
SelectObject(Hdc, obrush);
DeleteObject(khb);
这是绘制函数。 GDI好像没有直接绘制透明通道的 需要复制之后才行
各位朋友帮忙看看 大概什么地方出现问题了
我想要它不透明 不会鼠标穿透。
先谢谢了
[ 本帖最后由 qq664820828 于 2012-7-26 15:56 编辑 ]