资源描述:
《关于窗体透明的新方法.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、关于窗体透明的新方法.txt“我羡慕内些老人羡慕他们手牵手一直走到最后。━交话费的时候,才发现自己的话那么值钱。今天,跟陈文同志探讨了一下,想到了现在的迅雷7的透明效果,迅雷的透明度似乎是统一的。^V^个人认为UpdateLayeredWindow()可以实现透明的需求,只不过调用该函数窗体无法显示其他控件。、我的调用方法privatevoidSetAlphaBorder(Bitmapbit,Pointlocation){if(!haveHandle)return;if(!Bitmap.IsCanonicalPixelFor
2、mat(bit.PixelFormat)
3、
4、!Bitmap.IsAlphaPixelFormat(bit.PixelFormat))thrownewApplicationException("图片必须是32位带Alhpa通道的图片。");IntPtroldBits=IntPtr.Zero;IntPtrscreenDC=Win32.GetWindowDC(IntPtr.Zero);IntPtrhBitmap=IntPtr.Zero;IntPtrmemDc=Win32.CreateCompatibleDC(screenDC);t
5、ry{Win32.PointtopLoc=newWin32.Point(location.X,location.Y);Win32.SizebitMapSize=newWin32.Size(bit.Width,bit.Height);Win32.BLENDFUNCTIONblendFunc=newWin32.BLENDFUNCTION();Win32.PointsrcLoc=newWin32.Point(0,0);hBitmap=bit.GetHbitmap(Color.FromArgb(0));oldBits=Win32.S
6、electObject(memDc,hBitmap);blendFunc.BlendOp=Win32.AC_SRC_OVER;blendFunc.SourceConstantAlpha=255;blendFunc.AlphaFormat=Win32.AC_SRC_ALPHA;blendFunc.BlendFlags=0;Win32.UpdateLayeredWindow(Handle,screenDC,reftopLoc,refbitMapSize,memDc,refsrcLoc,0,refblendFunc,Win32.U
7、LW_ALPHA);}finally{if(hBitmap!=IntPtr.Zero){Win32.SelectObject(memDc,oldBits);Win32.DeleteObject(hBitmap);}Win32.ReleaseDC(IntPtr.Zero,screenDC);Win32.DeleteDC(memDc);}}UpdateLayeredWindow()函数原型[DllImport("user32.dll",ExactSpelling=true,SetLastError=true)]publicsta
8、ticexternintUpdateLayeredWindow(IntPtrhWnd,IntPtrhdcDst,refPointpptDst,refSizepsize,IntPtrhdcSrc,refPointpprSrc,intcrKey,refBLENDFUNCTIONpblend,intdwFlags);全部复制给你吧internalclassWin32{//////对窗口进行层次化处理//////窗口句柄///9、e="hdcDst">目标窗口的屏幕上下文句柄///目标位置///目标尺寸///内存句柄源///源位置///混合标志///合成方式///透明
10、标志///层次化窗口是否成功[DllImport("user32.dll",ExactSpelling=true,SetLastError=true)]publicstaticexternintUpdateLayeredWindow(I