资源描述:
《WINFORM窗体界面设计技巧-不规则、可改变大小、边框半透明效果》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方网上也看过很多做.NET窗体的例子,我只是把网上的这些东西综合了一下,主要有下面这些特点:1、边框是半透明的,透明度可根据需要自己更改;2、可以改变窗体的大小,改变后样式不变;3、窗体的边框是不规则的;4、重点解决了窗体会出现闪烁的问题,在窗体移动的时候也不会闪烁;5、使用方便,只要将AlphaFormPanel拖动到一般的窗体上就可以实现换肤; 设计思路说明:一、.NET下处理一个窗体部分透明我所知道的有两种方法: 1、用一张支持Alhp
2、a通道的图片来处理半透明,这种方式处理出来的效果会很好,甚至可以用一张动态的图片来做背景。----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方相信有人看过那个游动的鱼的程序,鱼的边缘是半透明的,就是用这种方式做的。这种方式整个窗体都是通过UpdateLayeredWindow画出来的,如果要在上面加控件的话,所有的控件都要自己来绘制,显然在具体的项目中用这种方式的话会大大增加开发的难度。有兴
3、趣的人可以看看这个程序: /Files/liutao409/游动的鱼.rar关键的代码就是根据这种支持Alhpa通道的图片来绘制窗体[DllImport("user32.dll",ExactSpelling=true,SetLastError=true)]publicstaticexternintUpdateLayeredWindow(IntPtrhwnd,IntPtrhdcDst,refPointpptDst,refSizepsize,IntPtrhdcSrc,refPointpptSrc,Int32crKey,ref BLENDFUNCTIONpbl
4、end,Int32dwFlags);publicvoidSetBits(Bitmapbitmap){ if(!haveHandle)return;if(!Bitmap.IsCanonicalPixelFormat(bitmap.PixelFormat)
5、!Bitmap.IsAlphaPixelFormat(bitmap.PixelFormat))thrownewApplicationException("图片必须是32位带Alhpa通道的图片。"); IntPtroldBits=IntPtr.Zero; IntPtr
6、screenDC=Win32.GetDC(IntPtr.Zero); IntPtrhBitmap=IntPtr.Zero; IntPtrmemDc=Win32.CreateCompatibleDC(screenDC); try { Win32.PointtopLoc=newWin32.Point(Left,Top); Win32.SizebitMapSize=newWin32.Size(bitmap.Width,bitmap.Height);
7、 Win32.BLENDFUNCTIONblendFunc=newWin32.BLENDFUNCTION(); Win32.PointsrcLoc=newWin32.Point(0,0); hBitmap=bitmap.GetHbitmap(Color.FromArgb(0)); oldBits=Win32.SelectObject(memDc,hBitmap); blendFunc.BlendOp=Win32.AC_SRC_OVER;
8、 blendFunc.SourceConstantAlpha=255; blendFunc.AlphaFormat=Win32.AC_SRC_ALPHA; blendFunc.BlendFlags=0; Win32.UpdateLayeredWindow(Handle,screenDC,reftopLoc,refbitMapSize,memDc,refsrcLoc,0,refblendFunc,Win32.ULW_ALPHA); } finally
9、 { if(hBi