当我们采用单文档模式下进行程序开发时,不一定总需要有菜单栏,那么怎么删除掉菜单栏呢?MFC库提供了API来设置菜单 SetMenu(HAND)。如果仅仅使用这个函数,那么你得到的结果是程序无法运行。原因是没有找到菜单。但是在程序中我们又没有发现设置菜单的部分。
我们分析下程序,MFC界面在类CMainFrame中采用OnCreate()函数创建并且CMainFarm继承自类CFrameWnd。通过调试跟踪发现在CFramWnd中有create函数并且Create函数含有菜单参数。因此,我们假设MFC在创建界面时动态隐式调用了Create函数并且将菜单传递给该参数。
因此,我们需要在CMainFrame类中继承并且重新定义Create函数。具体如下:
BOOL CMainFrame::Create( LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle ,
const RECT& rect ,
CWnd* pParentWnd ,
LPCTSTR lpszMenuName ,
DWORD dwExStyle ,
CCreateContext* pContext)
{
HMENU nIDorHMenu = NULL;
return CFrameWnd::CreateEx( dwExStyle,lpszClassName,lpszWindowName,dwStyle,
rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
pParentWnd->GetSafeHwnd(),
nIDorHMenu,
(LPVOID)pContext);
}
在CMainFrame中继承类后,在Oncreate()函数中调用SetMenu(NULL)程序就可以正常运行,并且没有菜单栏了。