首先是背景黑色的 显示正确然后是在半黑半白色的背景 就出现不同颜色了 现在是背景全白的样子 图片也全部白色了。各种背景颜色测试后 得出 图片跟随背景颜色改变 问题:
这是大概什么原因呢? 而且鼠标还会穿透 但是我没有设置它可以穿透的
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好像没有直接绘制透明通道的 需要复制之后才行
各位朋友帮忙看看 大概什么地方出现问题了 我想要它不透明 不会鼠标穿透。 先谢谢了
解决方案 »
- C#处理tiff格式的片
- SqlParameter 能用在数据库的名称上吗?数据库名是不定的所以我想用参数的方式实现
- 【求教】MDI父子窗体的两个问题
- 关于用C#创建系统帐户的问题
- 如何在 .Net Remoting 的服务端直接获取注册的服务对象?请教!
- C++编写的Dll,在C#中该如何调用,高手指点指点.
- 最头疼问题!!!高手速进
- 如果我有一个form, 又有一个新类,在新类中想给form中的控件,如txtbox赋值,怎么办呀。
- 如何读word文字到string?
- VS.net完全版下载网址
- C#中将listbox中的数据写入SQL数据库,数据库中只有时间没有内容
- 问个字符串的 正则表达式表达方法
原因出在UpdateLayeredWindow上、我忽略了dwFlags值,
dwFlags 这个参数可以是以下值之一:
ULW_ALPHA 使用pblend为混合功能,如果显示模式为256色或更少,这个值和ULW_OPAQUE效果相同;
ULW_COLORKEY 使用crKey值为颜色的透明度
ULW_OPAQUE 绘制一个不透明分层窗口
我选择的是ULW_OPAQUE 所以出现了上面的情况问题解决。
BOOL UpdateLayeredWindow(
HWND hwnd,
HDC hdcDst,
POINT *pptDst,
SIZE *psize,
HDC hdcSrc,
POINT *pptSrc,
COLORREF crKey,
BLENDFUNCTION *pblend,
DWORD dwFlags
); 我又学到一课,呵呵