请教如何屏蔽关闭按钮?
在WinForm中,如何屏蔽关闭按钮?
同时需要保留标题栏、最小化按钮、最大化按钮。
不可以在Closing进行拦截,因为这样的话会导致计算机无法重新启动。
问题点数:100、回复次数:12Top
1 楼fellowcheng(鹰击长空)回复于 2006-03-21 09:03:09 得分 0
不如自己做个带 标题栏、最小化按钮、最大化按钮的panel,替换系统默认的Top
2 楼zlz_212(ShREk)回复于 2006-03-21 09:08:00 得分 0
同意楼上的意见,自己动手,丰衣足食Top
3 楼BearRui(孤熊 | 带你去看海!)回复于 2006-03-21 09:09:30 得分 0
只能自己做!!!Top
4 楼dragonfly001(I want to fly!)回复于 2006-03-21 09:10:00 得分 0
#region 攔截Windows消息
[DllImport("user32.dll",EntryPoint="GetSystemMenu")]
extern static System.IntPtr GetSystemMenu(System.IntPtr hWnd , System.IntPtr bRevert);
static int MF_BYPOSITION = 0x400;
static int MF_REMOVE = 0x1000;
[DllImport("user32.dll",EntryPoint="RemoveMenu")]
extern static int RemoveMenu (IntPtr hMenu, int nPos, int flags);
private const int WS_SYSMENU = 0x00080000;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style = cp.Style & ~WS_SYSMENU;
return cp;
}
}
#endregion
這樣就OK了Top
5 楼mooddecode1980(心情解码)回复于 2006-03-21 09:11:04 得分 0
:)
-Top
6 楼dragonfly001(I want to fly!)回复于 2006-03-21 09:11:46 得分 40
加上這段屏蔽關閉信息
#region 攔截Windows消息
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{//捕捉關閉窗體消息
// User clicked close button
this.WindowState = FormWindowState.Minimized;
return;
}
base.WndProc(ref m);
}
#endregionTop
7 楼dragonfly001(I want to fly!)回复于 2006-03-21 09:15:03 得分 0
第一次發惡把關閉按鈕去掉了 ,第二次發的通過攔截關閉信息來達到效果:)Top
8 楼aiur2000(破愿立志别故里,荆棘南下思北风)回复于 2006-03-21 09:17:11 得分 0
做个头,最大最小调用就行了,还可以做美观Top
9 楼yf1025(小桥,流水,人家)回复于 2006-03-21 09:17:47 得分 60
[DllImport("user32.dll")]
internal static extern IntPtr GetSystemMenu(IntPtr hwnd,bool bRevert);
[DllImport("user32.dll")]
internal static extern int GetMenuItemCount(IntPtr hMenu);
[DllImport("user32.dll")]
internal static extern int RemoveMenu(IntPtr hMenu,int uPosition,int uFlags);
/// <summary>
/// 窗体的关闭按钮失效
/// </summary>
protected void CloseButtonEnable(){
// 默认窗口去除关闭按钮
const int MF_BYPOSITION = 0x00000400;
IntPtr hWindow = this.Handle;
IntPtr hMenu = GetSystemMenu(hWindow,false);
int count = GetMenuItemCount(hMenu);
RemoveMenu(hMenu,count - 1,MF_BYPOSITION);
RemoveMenu(hMenu,count - 2,MF_BYPOSITION);
}Top
10 楼cellblue(cellblue)回复于 2006-03-21 10:09:48 得分 0
还真蛮复杂的
Top
11 楼cellblue(cellblue)回复于 2006-03-21 10:18:09 得分 0
dragonfly001(我思考,我生存!) 的方法是把整个的标题栏按钮都去掉了,
yf1025(小桥,流水,人家) 的方法可行Top
12 楼cellblue(cellblue)回复于 2006-03-21 10:19:35 得分 0
再问一下,如果不屏蔽关闭按钮的情况下,点击了关闭按钮让它执行最小化操作该如何处理?
Top




