一定要是Vista以上的作业系统才可以使用,要怎么探测自己处理
- If (System.Environment.OSVersion.Major >=6)
- {
- //TODO
- }else{
- Messagebox.Show(null,"dwm.exe Not Enabled");
- }
方法非常简单,只需把Button的属性项里的FlatStyle设为System (设置之后将会有Fade的效果)
之后是MenuStrip
在MenuStrip里面的Item,全部背景色都是深蓝色的,丑极了。我们只需要更改一点点东西就可以把背景色变成天蓝色的渐变。
方法:去Toolbox的Toolbox Tab点右键,在.NET Components Tab里面找Main Menu,有3个两个已经打勾,把剩下的一个也打勾,再把已加入的Mainmenu元件拖出即可
这个是非常简单的东西,之后我要教的是APIs
API 函数呼叫教学
- //方法一:旧的,我喜欢这个(VB),C#我不知道对不对
- private static extern int DwmExteadFameIntoClientArea lib "dwmapi.dll" alias "DwmExteadClientIntoFrameArea"(IntPtr Hwnd, MARGINS margin)
- //private = 类型,protected,private,public,etc.
- //static extern = 不知道,照抄 :)
- //int = 函数回转类型
- //DwmExteadFrameIntoClientArea = 设置的函数呼叫名称
- //lib "" = dll名称
- //alias = dll里面的函数名称
- //() = 函数呼叫所需资料
-
- //方法二:新款的,我不太会用
- [System.Runtime.InteropService.DllImport("dwmapi.dll")] _
- private static extern int DwmExteadFrameIntoClientArea(Intptr HWND, MARGINS margin)
- //System.Runtime.InteropService.DllImport("") = 导入DLL函数,("")为DLL名称
程式库 | 函数名称 | 函数资料 | 使用说明 | 效果 |
dwmapi.dll | DwmExteadFrameIntoClientArea | Intptr hwnd, MARGINS margin returns int MARGINS为新的数据类型 struct MARGINS { int left; int right; int top; int bottom; } | 在这个教学中,所有的Intptr hwnd都是放<Object.Handle> 这里就要放this.handle,如果你不会的话Margins就放 new margins(this.left *2,this.right*2,this.top*2,this.botton*2) 其实这个是把匡的半透明(Frame's Transparent) 延展到程序区域(Client Area) | 可以把指定位置变成Aero Transparent |
dwmapi.dll | DwmIsCompositionEnabled | int isaeroenabled returns int | if(DwmIsCompositionEnabled == true) 只有true和false,可以说是boolean,但是我不知道为什么他用Integer | 可以探测Aero Interface是否已经启用 |
uxtheme.dll | SetWindowTheme | IntPtr Hwnd String TextSubAppName String TextSubIDList | SetWindowTheme(object.Handle, "explorer", null); 只需把object变成你要弄的东西即可 | 可以把Highlight(蓝色)变成Aero的蓝色渐变,还有tree view的+和-变成斜边三角形,MouseOver还会发亮 (下面有图) |
user32.dll | SendMessage | IntPtr hWnd int msg int wParam int lParam | 这个有很多功能,我下面会在解释 | 很多效果,但是我只会放几个,其他有网站参考 |
SendMessage的用法
Progressbar :
- SendMessage(progressbar1.Handle, 0x400 + 16, 0x0001, 0); //Normal; Green
- SendMessage(progressbar1.Handle, 0x400 + 16, 0x0002, 0); //Error; Red
- SendMessage(progressbar1.Handle, 0x400 + 16, 0x0003, 0); //Pause; Yellow
- SendMessage(textbox1.Handle, 0x1500 + 1, IntPtr.Zero,
- "Please type in something."); //Please type in something是你要的String
这个要用很多API……我根本看不懂
在Project里加入一个Code File
GlassText.cs [二楼]
然后
- GlassText glasstxt = new GlassText(); //OOP : 引入GlassText.cs
- glasstxt.DrawTextOnGlass(this.Handle, lblText.Text, lblText.Font, lblText.Bounds,10 ); //10应该是glow的pixel(px)
问题 2:在有Aero Transparent的区域放入图片会变得非常丑
其实这些问题都有一个非常简单也非常麻烦的解决方法,那就是不要用Label和ImageBox
更新中
[ 本帖最后由 goodhermit95 于 2009-10-20 09:48 PM 编辑 ]