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消息处理程序