在开发过程中都会遇到一些小小的问题,可能这个问题看似简单,但处理起来就相当的麻烦也说不定.
我将一些自己开发中的小技巧写出来告诉给大家,希望大家有所帮助.
这篇文章中将介绍如何隐藏起Form右上角的OK/X按钮,有时候用户觉得不需要这个按钮,那去掉它吧~~~~
再次介绍下该按钮的功能,X表示最小化,OK表示确认并关闭.通常新建一个Form后,默认窗体的最小化是True,所以如果需要显示OK的话,就需要将该属性设为False.
隐藏该按钮需要调用3个API
1 [DllImport("aygshell.dll")]
2 private static extern bool SHDoneButton(IntPtr hWnd, UInt32 dwState);
3
4 [DllImport("coredll.dll")]
5 public static extern UInt32 SetWindowLong(IntPtr hWnd, int nIndex, UInt32 dwNewLong);
6
7 [DllImport("coredll.dll")]
8 public static extern UInt32 GetWindowLong(IntPtr hWnd, int nIndex);
2 private static extern bool SHDoneButton(IntPtr hWnd, UInt32 dwState);
3
4 [DllImport("coredll.dll")]
5 public static extern UInt32 SetWindowLong(IntPtr hWnd, int nIndex, UInt32 dwNewLong);
6
7 [DllImport("coredll.dll")]
8 public static extern UInt32 GetWindowLong(IntPtr hWnd, int nIndex);
SHDoneButton--窗体为OK时,调用此方法即可.
GetWindowLong--获得指定窗口的信息
SetWindowLong--设置指定窗口的信息,这2个方法结合起来用,才能隐藏X按钮
具体使用
1 public const UInt32 SHDB_SHOW = 0x0001;
2 public const UInt32 SHDB_HIDE = 0x0002;
3 public const int GWL_STYLE = -16;
4 public const UInt32 WS_NONAVDONEBUTTON = 0x00010000;
5
6 /// <summary>
7 /// 隐藏OK按钮
8 /// </summary>
9 /// <param name="hWnd"></param>
10 public static void HideDoneButton(IntPtr hWnd)
11 {
12 SHDoneButton(hWnd, SHDB_HIDE);
13 }
14
15 /// <summary>
16 /// 隐藏X按钮
17 /// </summary>
18 /// <param name="hWnd"></param>
19 public static void HideXButton(IntPtr hWnd)
20 {
21 UInt32 dwStyle = GetWindowLong(hWnd, GWL_STYLE);
22
23 if ((dwStyle & WS_NONAVDONEBUTTON) == 0)
24 SetWindowLong(hWnd, GWL_STYLE, dwStyle | WS_NONAVDONEBUTTON);
25 }
2 public const UInt32 SHDB_HIDE = 0x0002;
3 public const int GWL_STYLE = -16;
4 public const UInt32 WS_NONAVDONEBUTTON = 0x00010000;
5
6 /// <summary>
7 /// 隐藏OK按钮
8 /// </summary>
9 /// <param name="hWnd"></param>
10 public static void HideDoneButton(IntPtr hWnd)
11 {
12 SHDoneButton(hWnd, SHDB_HIDE);
13 }
14
15 /// <summary>
16 /// 隐藏X按钮
17 /// </summary>
18 /// <param name="hWnd"></param>
19 public static void HideXButton(IntPtr hWnd)
20 {
21 UInt32 dwStyle = GetWindowLong(hWnd, GWL_STYLE);
22
23 if ((dwStyle & WS_NONAVDONEBUTTON) == 0)
24 SetWindowLong(hWnd, GWL_STYLE, dwStyle | WS_NONAVDONEBUTTON);
25 }
在实际调用时,只要将窗体的Handle作为参数传入即可.
隐藏按钮后,如何打开?
只需要设置窗体的MinimizeBox属性即可.想显示OK,设为False.想显示X,设为True即可.
显示效果:
显示OK按钮
显示X按钮
隐藏按钮
代码下载:DeviceTechDemo.rar
运行环境:VS2008 + WM6.0 + .net cf3.5
Author:AppleSeeker(冯峰)
Date:2009-2-2
文章导读:移动开发索引贴