支援 Office 2000 風格:
| ID | 值 | 說明 |
|---|---|---|
ID_SHOWFULL | 32792 | 顯示完整選單 |
ID_INTMODE | 32794 | 啟用/停用智慧模式 |
.cpp/.h 至專案MainFrm.h#include "MDIFrmEx.h"
#include "ToolBarEx.h"
class CMainFrame : public CMDIFrameEx
{
// ...
CToolBarEx m_wndToolBar; // 原為 CToolBar
};
MainFrm.cppIMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameEx)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameEx)
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameEx::OnCreate(lpCreateStruct) == -1) return -1;
// ...
}
MyApp.h#include "WinAppEx.h"
class CTestMDIApp : public CWinAppEx { ... };
MyApp.cpp — 關鍵:使用 CMultiDocTemplateExBEGIN_MESSAGE_MAP(CTestMDIApp, CWinAppEx)
#include "DocTplEx.h"
BOOL CTestMDIApp::InitInstance()
{
// ...
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE;
m_pMainWnd = pMainFrame;
UINT nID = IDR_MAINFRAME;
CMultiDocTemplateEx* pDocTemplate = new CMultiDocTemplateEx(
IDR_TESTMDTYPE,
RUNTIME_CLASS(CTestMDIDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CTestMDIView),
&nID, 1);
AddDocTemplate(pDocTemplate);
CWinAppEx::InitInstance(); // 必須呼叫基類擴充初始化
return TRUE;
}
覆寫 CMenuBar 兩個虛擬函式可完全控制智慧選單演算法:
// 累計使用計數
WORD CMenuBar::IncMenuUsage(CMenuEx* pParent, UINT pos, WORD curUsage);
// 決定是否灰顯/隱藏
BOOL CMenuBar::EvaluateIfGrayed(CMenuEx* pParent, UINT pos,
WORD& curUsage, int iMed, int iRange);
若需在選單項目附加應用程式自訂資料,可使用 CMenuEx::GetExtraDataPtr(UINT)。
CMultiDocTemplateEx、CMDIFrameEx 等類別。