windows api 问题···

zsyok 2012-01-20 01:26:26

Bitmap bitmap = (Bitmap)img;
IntPtr hObject = IntPtr.Zero;
IntPtr zero = IntPtr.Zero;
IntPtr hDC = Win32.GetDC(IntPtr.Zero);
IntPtr ptr2 = Win32.CreateCompatibleDC(hDC);

hObject = bitmap.GetHbitmap(Color.FromArgb(0, 0, 0));

zero = Win32.SelectObject(ptr2, hObject);
Win32.Size size2 = new Win32.Size(bitmap.Width, bitmap.Height);


Win32.Size psize = size2;
Win32.Point point3 = new Win32.Point(0, 0);

Win32.Point pprSrc = point3;
point3 = new Win32.Point(0, 0);

Win32.Point pptDst = point3;
Win32.BLENDFUNCTION pblend = new Win32.BLENDFUNCTION();
pblend.BlendOp = 0;
pblend.BlendFlags = 0;
pblend.SourceConstantAlpha = 0xff;
pblend.AlphaFormat = 1;
Win32.UpdateLayeredWindow(this.Handle, hDC, ref pptDst, ref psize, ptr2, ref pprSrc, 0, ref pblend, 2);


Win32.ReleaseDC(IntPtr.Zero, hDC);
if (hObject != IntPtr.Zero)
{
Win32.SelectObject(ptr2, zero);
Win32.DeleteObject(hObject);
}
Win32.DeleteDC(ptr2);


//请求,详细注视。
对windows api一点都不熟·#
...全文
88 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylike 2012-01-21
  • 打赏
  • 举报
回复
简单说就是临时使用一个句柄,在这个句柄上画图,然后由系统合成到桌面上,但仅仅以上代码是完全不够的,还需要窗体本身进行扩展样式消息处理.如果觉得麻烦可以用这个:

DYD.DLL单窗体实现层窗体显示控件
http://download.csdn.net/detail/dylike/4028682
蔡袅 2012-01-20
  • 打赏
  • 举报
回复
Bitmap bitmap = (Bitmap)img;
IntPtr hObject = IntPtr.Zero;
IntPtr zero = IntPtr.Zero;
//获取设备上下文
IntPtr hDC = Win32.GetDC(IntPtr.Zero);
//创建一个与指定的hDC相容的内存设备上下文
IntPtr ptr2 = Win32.CreateCompatibleDC(hDC);
hObject = bitmap.GetHbitmap(Color.FromArgb(0, 0, 0));
//选定一个对象到设备上下文
zero = Win32.SelectObject(ptr2, hObject);
Win32.Size size2 = new Win32.Size(bitmap.Width, bitmap.Height);
Win32.Size psize = size2;
Win32.Point point3 = new Win32.Point(0, 0);
Win32.Point pprSrc = point3;
point3 = new Win32.Point(0, 0);
Win32.Point pptDst = point3;
Win32.BLENDFUNCTION pblend = new Win32.BLENDFUNCTION();
pblend.BlendOp = 0;
pblend.BlendFlags = 0;
pblend.SourceConstantAlpha = 0xff;
pblend.AlphaFormat = 1;
//更新位置,大小,形状,内容和一个半透明的窗体图层
Win32.UpdateLayeredWindow(this.Handle, hDC, ref pptDst, ref psize, ptr2, ref pprSrc, 0, ref pblend, 2);
//释放设备上下文
Win32.ReleaseDC(IntPtr.Zero, hDC);
if (hObject != IntPtr.Zero)
{
Win32.SelectObject(ptr2, zero);
//Deletes the attached Windows GDI object from memory by freeing all system storage associated with the Windows GDI object.
//从内存中删除这个附加的Windows GDI对象,通过释放所有系统存储器关联的Windows GDI对象
Win32.DeleteObject(hObject);
}
Win32.DeleteDC(ptr2);
Tim_Andy 2012-01-20
  • 打赏
  • 举报
回复
图片层窗体...
zsyok 2012-01-20
  • 打赏
  • 举报
回复
每一句的作用是什么~~~小弟不懂。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧