`#include` 預處理指令與「菜單目錄轉換」完全無關。
初學者將「頭文件聲明菜單資源 ID」與「菜單切換代碼」混淆:
- `resource.h` 定義 `ID_MENU_FILE_NEW` 等常量(`#define`)。
- `.rc` 資源腳本定義菜單結構、項目 ID。
- `.cpp` 中 `ON_COMMAND(ID_MENU_FILE_NEW, OnFileNew)` 映射消息到處理函數。
**以上均不涉及 `#include` 控制菜單切換邏輯。**
// MainFrm.cpp
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
ON_COMMAND(ID_VIEW_TOOLBAR, &CMainFrame::OnViewToolBar)
ON_COMMAND(ID_VIEW_STATUS_BAR, &CMainFrame::OnViewStatusBar)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, &CMainFrame::OnUpdateViewToolBar)
END_MESSAGE_MAP()
void CMainFrame::OnViewToolBar() {
ShowControlBar(&m_wndToolBar, !m_wndToolBar.IsVisible(), FALSE);
}
void CMainFrame::OnUpdateViewToolBar(CCmdUI* pCmdUI) {
pCmdUI->SetCheck(m_wndToolBar.IsVisible()); // 菜單項打鉤狀態同步
}
IDR_MAINFRAME MENU
BEGIN
POPUP "&View"
BEGIN
MENUITEM "&Toolbar\tCtrl+T", ID_VIEW_TOOLBAR
MENUITEM "&Status Bar\tCtrl+S", ID_VIEW_STATUS_BAR
END
END
不要把**編譯時預處理**與**運行時 UI 交互**混為一談。`#include` 只管「誰能看到聲明」,菜單切換只管「誰響應消息」。