VC实现让关闭按钮成灰色不可用的方法
对于有些情况下运行的VC项目程序来说,会有禁止用户通过标题栏上的关闭按钮关闭窗口的情况,你会发现,这时候程序的关闭按钮变成灰色不可用,从任务栏处也无法关闭窗口,菜单同样是灰色的,很好的禁止了窗口关闭功能,如果想关闭,可以按键盘上的快捷键“ALT+F4”,或者通过任务管理器结束任务。下面就来说明一下这个功能的核心代码文件。
禁用关闭按钮的具体功能代码如下:
#include"stdafx.h" #include"Test.h" #include"MainFrm.h" #ifdef_DEBUG #definenewDEBUG_NEW #endif //CMainFrame IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) ON_WM_CREATE() END_MESSAGE_MAP() staticUINTindicators[]= { ID_SEPARATOR,//状态行指示器 ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; //CMainFrame构造/销毁 CMainFrame::CMainFrame() { //TODO:在此添加成员初始化代码 } CMainFrame::~CMainFrame() { } intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct) { if(CFrameWnd::OnCreate(lpCreateStruct)==-1) return-1; if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP |CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)|| !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("未能创建工具栏\n"); return-1;//未能创建 } if(!m_wndStatusBar.Create(this)|| !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("未能创建状态栏\n"); return-1;//未能创建 } //TODO:如果不需要工具栏可停靠,则删除这三行 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); //取得系统菜单 CMenu*pMenu=GetSystemMenu(FALSE); //取得系统菜单数量 intCount=pMenu->GetMenuItemCount(); //取得关闭菜单的ID UINTID=pMenu->GetMenuItemID(Count-1); //禁止关闭菜单 pMenu->EnableMenuItem(ID,MF_GRAYED); return0; } BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs) { if(!CFrameWnd::PreCreateWindow(cs)) returnFALSE; //TODO:在此处通过修改CREATESTRUCTcs来修改窗口类或 //样式 returnTRUE; } //CMainFrame诊断 #ifdef_DEBUG voidCMainFrame::AssertValid()const { CFrameWnd::AssertValid(); } voidCMainFrame::Dump(CDumpContext&dc)const { CFrameWnd::Dump(dc); } #endif//_DEBUG //CMainFrame消息处理程序