// ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
virtual BOOL InitInstance();
};
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° CMultiMenuApp
CMultiMenuApp MultiMenuApp;
//============================================================
// ΠΠ»Π°ΡΡ CMultiMenuWindow β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
//============================================================
class CMultiMenuWindow : public CFrameWnd {
protected:
// ΠΠ°Π½Π΅Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
CStatusBar m_wndStatusBar;
// Π€Π»Π°Π³ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΎΠΉ Prosess ΠΌΠ΅Π½Ρ Mission
BOOL bEnable;
// Π€Π»Π°Π³ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΎΠΉ Construction ΠΌΠ΅Π½Ρ Mission
BOOL bRadio;
// Π€Π»Π°Π³ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΎΠΉ Restrict ΠΌΠ΅Π½Ρ Menu
int nCheck;
protected:
// ΠΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// ΠΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
// ΠΎΡ ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
afx_msg void CMultiMenuWindow::OnDisable();
afx_msg void CMultiMenuWindow::OnCommand();
afx_msg void CMultiMenuWindow::OnExit();
afx_msg void CMultiMenuWindow::OnConstruct();
afx_msg void CMultiMenuWindow::OnRestrictMenu();
afx_msg void CMultiMenuWindow::OnFullMenu();
// ΠΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅Π½Ρ
afx_msg void OnUpdateProcess(CCmdUI* pCmdUI);
afx_msg void OnUpdateConstruct(CCmdUI* pCmdUI);
afx_msg void OnUpdateDisable(CCmdUI* pCmdUI);
public:
// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
CMultiMenuWindow();
// ΠΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡ
// CMultiMenuWindow ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
DECLARE_MESSAGE_MAP()
};
//============================================================
// Π’Π°Π±Π»ΠΈΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
//============================================================
BEGIN_MESSAGE_MAP(CMultiMenuWindow, CFrameWnd)
// ΠΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ OnCreate
ON_WM_CREATE()
// ΠΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ OnContextMenu
ON_WM_CONTEXTMENU()
// ΠΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
ON_COMMAND(ID_MENU_DISABLE, OnDisable)
ON_COMMAND(ID_MISSION_CONSTRUCT, OnConstruct)
ON_COMMAND(ID_FILE_EXIT, OnExit)
ON_COMMAND(ID_MISSION_PROCESS, OnCommand)
ON_COMMAND(ID_MENU_RESTRICT, OnRestrictMenu)
ON_COMMAND(ID_MENU_FULL, OnFullMenu)
// ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ON_UPDATE_COMMAND_UI
ON_UPDATE_COMMAND_UI(ID_MISSION_PROCESS, OnUpdateProcess)
ON_UPDATE_COMMAND_UI(ID_MISSION_CONSTRUCT, OnUpdateConstruct)
ON_UPDATE_COMMAND_UI(ID_MENU_DISABLE, OnUpdateDisable)
END_MESSAGE_MAP()
// ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
UINT indicator = ID_SEPARATOR;
//============================================================
// ΠΠ΅ΡΠΎΠ΄ InitInstance ΠΊΠ»Π°ΡΡΠ° CMultiMenuApp
// Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π΅Π³ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅
//============================================================
BOOL CMultiMenuApp::InitInstance() {
m_pMainWnd = new CMultiMenuWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
//============================================================
// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
//============================================================
CMultiMenuWindow::CMultiMenuWindow() {
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅
// Π΄Π°Π½Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
Create(NULL, "Multi Menu Sample", WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_FULL_MENU));
// ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠ»Π°Π²ΠΈΡ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΈΠΈ
LoadAccelTable(MAKEINTRESOURCE(IDR_ACCELERATOR));
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ»Π°Π³ΠΈ
bEnable = TRUE;
bRadio = TRUE;
nCheck = 0;
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnCreate ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
// ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
//============================================================
int CMultiMenuWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ OnCreate Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
if (!m_wndStatusBar.Create(this)) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
TRACE0("Failed to create status bar\n");
return -1;
}
// ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
if (!m_wndStatusBar.SetIndicators(&indicator, 1)) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°
TRACE0("Failed to set indicators\n");
return -1;
}
return 0;
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnDisable ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
// ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ»Π°Π³ΠΎΠ² bEnable ΠΈ nCheck
//============================================================
void CMultiMenuWindow::OnDisable(){
// ΠΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ bEnable Ρ TRUE Π½Π° FALSE ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ
bEnable = !bEnable;
// ΠΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ bEnable Ρ 1 Π½Π° 0 ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ
nCheck = (nCheck == 1) ? 0 : 1;
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnRestrictMenu ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
// ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ IDR_FULL_MENU Π½Π°
// IDR_RESTRICT_MENU
//============================================================
void CMultiMenuWindow::OnRestrictMenu(){
CMenu menuOld; // ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ
CMenu menuRestrict; // Π½ΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ
CMenu* pMenu;
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ
pMenu = this->GetMenu();
// Π‘Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅Π½Ρ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ menuOld
menuOld.Attach(pMenu->m_hMenu);
// Π£Π΄Π°Π»ΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ
menuOld.DestroyMenu();
// ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠ΅Π½Ρ IDR_RESTRICT_MENU
menuRestrict.LoadMenu(IDR_RESTRICT_MENU);
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΌΠ΅Π½Ρ
SetMenu(&menuRestrict);
// Π Π°Π·ΡΡΠ²Π°Π΅ΠΌ ΡΠ²ΡΠ·Ρ ΠΌΠ΅Π½Ρ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ menuRestrict
menuRestrict.Detach();
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnFullMenu ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
// ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ IDR_RESTRICT_MENU Π½Π°
// IDR_FULL_MENU
//============================================================
void CMultiMenuWindow::OnFullMenu() {
CMenu menuOld;
CMenu menuRestrict;
CMenu* pMenu;
pMenu = this->GetMenu();
menuOld.Attach(pMenu->m_hMenu);
menuOld.DestroyMenu();
menuRestrict.LoadMenu(IDR_FULL_MENU);
SetMenu(&menuRestrict);
menuRestrict.Detach();
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnCommand ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnCommand() {
MessageBox("Command not implemented");
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnConstruct ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
// ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ»Π°Π³Π° bRadio
//============================================================
void CMultiMenuWindow::OnConstruct() {
// ΠΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ bRadio Ρ TRUE Π½Π° FALSE ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ
bRadio = !bRadio;
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnExit ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnExit() {
// ΠΠ°Π²Π΅ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
DestroyWindow();
return;
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnUpdateProcess ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnUpdateProcess(CCmdUI* pCmdUI) {
// ΠΠ»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΡΠΎΠΊΡ Process ΠΌΠ΅Π½Ρ Mission
pCmdUI->Enable(bEnable);
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnUpdateConstruct ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnUpdateConstruct(CCmdUI* pCmdUI) {
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ»ΠΈ ΡΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΠΊΡ
// ΡΡΡΠΎΠΊΠΈ Construction ΠΌΠ΅Π½Ρ Mission
pCmdUI->SetRadio(bRadio);
}
//============================================================
// ΠΠ΅ΡΠΎΠ΄ OnUpdateDisable ΠΊΠ»Π°ΡΡΠ° CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnUpdateDisable(CCmdUI* pCmdUI) {
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΠΊΡ
// Ρ ΡΡΡΠΎΠΊΠΈ Disable ΠΌΠ΅Π½Ρ Menu
pCmdUI->SetCheck(nCheck);
}
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ MultiMenu.rc. ΠΠΊΠ»ΡΡΠΈΡΠ΅ Π² Π½Π΅Π³ΠΎ Π΄Π²Π° ΠΌΠ΅Π½Ρ, ΠΏΡΠΈΡΠ²ΠΎΠΈΠ² ΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ IDR_RESTRICT_MENU ΠΈ IDR_FULL_MENU.
ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΡΠΈΡ ΠΌΠ΅Π½Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ Π½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² (Π»ΠΈΡΡΠΈΠ½Π³ 3.2). ΠΠ»Ρ Π²ΡΠ΅Ρ ΡΡΡΠΎΠΊ ΠΌΠ΅Π½Ρ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ. ΠΠ½ΠΈ Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΡΡΠΎΠ² ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΌΠ΅Π½Ρ.