最近想在VC中單文檔框架中刪除菜單,狀態欄,工具欄 。狀態欄,工具欄在CMainFrame::OnCreate中就可以注釋調,但是怎麼樣將菜單刪掉呢?百度了一下,不太好找到。只好依靠現有知識,自己找到辦法了。通過跟蹤調試MFC的源代碼居然讓我找到了辦法。
首先,我們先想辦法達到在單文檔界面中不顯示菜單的效果。
通過現有知識,我們知道MFC是在CMainFrame::OnCreate中生成狀態欄,工具欄的。代碼如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
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("未能創建工具欄 ");
return -1; // 未能創建
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("未能創建狀態欄 ");
return -1; // 未能創建
}
// TODO: 如果不需要工具欄可停靠,則刪除這三行
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
所以如果不想要狀態欄,工具欄,直接在CMainFrame::OnCreate中將相關代碼注釋調就行了。那麼,菜單相關的代碼在哪呢?遍歷一遍CMainFrame類,沒找到。根據代碼相關性,既然狀態欄,工具欄是在 CMainFrame::OnCreate中生成的,那麼菜單估計也是在這個函數裡面生成的。
首先在 if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 處下斷點,進入函數內部,代碼如下:
int CFrameWnd::OnCreate(LPCREATESTRUCT lpcs)
{
ENSURE_ARG(lpcs != NULL);
CCreateContext* pContext = (CCreateContext*)lpcs->lpCreateParams;
return OnCreateHelper(lpcs, pContext);
}
繼續進入OnCreateHelper函數,代碼如下:
int CFrameWnd::OnCreateHelper(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (CWnd::OnCreate(lpcs) == -1)
return -1;
// create special children first
if (!OnCreateClIEnt(lpcs, pContext))
{
TRACE(traceAppMsg, 0, "Failed to create client pane/vIEw for frame. ");
return -1;
}
// post message for initial message string
PostMessage(WM_SETMESSAGESTRING, AFX_IDS_IDLEMESSAGE);
// make sure the child Windows have been properly sized
RecalcLayout();
return 0; // create ok
}
下一步進入OnCreateClIEnt,代碼如下:
BOOL CFrameWnd::OnCreateClIEnt(LPCREATESTRUCT, CCreateContext* pContext)
{
// default create client will create a v
[1] [2] [3] [4] 下一頁