标题:新人求解,GDI绘制变成半透明 鼠标穿透求解。
只看楼主
qq664820828
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-7-26
 问题点数:0 回复次数:1 
新人求解,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 编辑 ]
搜索更多相关主题的帖子: 背景 
2012-07-26 15:53
qq664820828
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-7-26
得分:0 
UpdateLayeredWindow(Hwnd, 0, ref Point, ref Size, Hdc, ref TempPoint, 0, ref TempBlend,0); 解决
2012-07-27 23:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-374159-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034211 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved