上面的一些需求,通過(guò)對(duì)窗體屬性的一些設(shè)置,基本都可以實(shí)現(xiàn),但是,確并不總是能滿足我們的需要。
例如:我們需要讓關(guān)閉按鈕顯示,但是變灰(不能點(diǎn)擊),同時(shí)正常的顯示最大化和最小化按鈕
API中,對(duì)于菜單的操作,可謂豐富,常用的有:

我這里,就舉2個(gè)例子, EnableMenuItem 和 DeleteMenu



完整的代碼如下:
[DllImport("user32.dll")]static extern IntPtr GetSystemMenu(IntPtr hwnd, bool bRevert);[DllImport("user32.dll")]static extern bool DeleteMenu(IntPtr hMenu, uint uPosition, uint uFlags);[DllImport("user32.dll")]static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);const uint SC_MOVE = 0xF010; //移動(dòng)const uint SC_CLOSE = 0xF060;//關(guān)閉const uint MF_BYCOMMAND = 0x00; //按命令方式const uint MF_GRAYED = 0x01; //灰掉const uint MF_DISABLED = 0x02; //不可用private void Form1_Load(object sender, EventArgs e){IntPtr hMenu = GetSystemMenu(this.Handle, false); //獲取程序窗體的句柄if (hMenu != IntPtr.Zero){DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND); //刪除移動(dòng)菜單,禁用移動(dòng)功能EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED); //禁用關(guān)閉功能}}