做winform开发的时候,常常为了美化界面,把窗体的FormBorderStyle属性设置为None,即所谓的无标题窗体,这个时候,在任务栏鼠标右击是没有菜单的,那么如何吧默认的系统菜单还原回来呢?
第一步,引用命名空间
using
System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;
第二部,申明win32方法,放在Form类里面
[DllImport(
"
user32.dll
"
, EntryPoint
=
"
GetWindowLong
"
, CharSet
=
CharSet.Auto)]
public static extern int GetWindowLong(HandleRef hWnd, int nIndex);
[DllImport( " user32.dll " , EntryPoint = " SetWindowLong " , CharSet = CharSet.Auto)]
public static extern IntPtr SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);
public static extern int GetWindowLong(HandleRef hWnd, int nIndex);
[DllImport( " user32.dll " , EntryPoint = " SetWindowLong " , CharSet = CharSet.Auto)]
public static extern IntPtr SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);
第三步,在Form的Load事件中添加以下代码
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//
无标题窗体右键菜单
int WS_SYSMENU = 0x00080000 ; // 系统菜单
int WS_MINIMIZEBOX = 0x20000 ; // 最大最小化按钮
int windowLong = (GetWindowLong( new HandleRef( this , this .Handle), - 16 ));
SetWindowLong( new HandleRef( this , this .Handle), - 16 , windowLong | WS_SYSMENU | WS_MINIMIZEBOX);
int WS_SYSMENU = 0x00080000 ; // 系统菜单
int WS_MINIMIZEBOX = 0x20000 ; // 最大最小化按钮
int windowLong = (GetWindowLong( new HandleRef( this , this .Handle), - 16 ));
SetWindowLong( new HandleRef( this , this .Handle), - 16 , windowLong | WS_SYSMENU | WS_MINIMIZEBOX);
第四步,把以下代码添加到Form的类中
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
protected
override
CreateParams CreateParams
2 {
3 get
4 {
5 const int WS_MINIMIZEBOX = 0x00020000 ; // Winuser.h中定义
6 CreateParams cp = base .CreateParams;
7 cp.Style = cp.Style | WS_MINIMIZEBOX; // 允许最小化操作
8 return cp;
9 }
10 }
2 {
3 get
4 {
5 const int WS_MINIMIZEBOX = 0x00020000 ; // Winuser.h中定义
6 CreateParams cp = base .CreateParams;
7 cp.Style = cp.Style | WS_MINIMIZEBOX; // 允许最小化操作
8 return cp;
9 }
10 }
通过以上步骤,就可以把系统默认菜单给恢复啦。
作者:
风雨彩虹
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。