Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Microsoft Visual C++ ΠΈ MFC. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Windows 95 ΠΈ Windows NT. Π§Π°ΡΡ‚ΡŒ 2Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 21

Автор АлСксандр Π€Ρ€ΠΎΠ»ΠΎΠ²

 // Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ»ΠΈ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ строку 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). Для всСх строк мСню Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΈΡ… описания. Они Π±ΡƒΠ΄ΡƒΡ‚ записаны Π² Ρ„Π°ΠΉΠ» рСсурсов ΠΊΠ°ΠΊ строковыС рСсурсы, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ со строками мСню.

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ„Π°ΠΉΠ» рСсурсов строку Ready, Π²Ρ‹Π±Ρ€Π°Π² для Π½Π΅Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ AFX_IDS_IDLEMESSAGE. Π­Ρ‚Π° строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΏΠ°Π½Π΅Π»ΠΈ состояния Π²ΠΎ врСмя β€œΠ±Π΅Π·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡβ€ прилоТСния.

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ» рСсурсов Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ аксСлСраторов, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠ°Π½Π΄: ID_MENU_DISABLE, ID_MISSION_PROCESS ΠΈ ID_FILE_EXIT. ΠŸΡ€ΠΈΡΠ²ΠΎΠΉΡ‚Π΅ ΠΈΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш <Ctrl+D>, <Ctrl+P> ΠΈ <Ctrl+E> соотвСтствСнно.

Листинг 3.3. Π€Π°ΠΉΠ» resource.h

//{{NO_DEPENDENCIES}}

// Microsoft Developer Studio generated include file.

// Used by MultiMenu.rc

//

#define IDR_RESTRICT_MENU               106

#define IDR_FULL_MENU                   107

#define IDR_ACCELERATOR                 108

#define ID_FILE_EXIT                    40009

#define ID_MISSION_PROCESS              40013

#define ID_HELP_HELPINDEX               40014

#define ID_HELP_CONTEXTHELP             40015

#define ID_HELP_SYSTEMINFO              40016

#define ID_MISSION_CONSTRUCT            40017

#define ID_MENU_RESTRICT                40019

#define ID_MENU_FULL                    40020

#define ID_MENU_DISABLE                 40025


// Next default values for new objects

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE        110

#define _APS_NEXT_COMMAND_VALUE         40027

#define _APS_NEXT_CONTROL_VALUE         1000

#define _APS_NEXT_SYMED_VALUE           101

#endif

#endif

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MultiMenu ΠΈ запуститС Π΅Π³ΠΎ. На экранС появится ΠΎΠΊΠ½ΠΎ прилоТСния с Π³Π»Π°Π²Π½Ρ‹ΠΌ мСню ΠΈ панСлью состояния (рис. 3.4).

Π’ ΠΏΠ°Π½Π΅Π»ΠΈ состояния располоТСн ΠΎΠ΄ΠΈΠ½ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’ Π½Π΅ΠΌ отобраТаСтся подсказка ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ строкС мСню прилоТСния ΠΈΠ»ΠΈ систСмного мСню, Π° Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€œΠ±Π΅Π·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΠ΅Ρ‚β€ – строка Ready.

Рис. 3.4. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MultiMenu


Π‘Ρ€Π°Π·Ρƒ послС запуска прилоТСния MultiMenu ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мСню с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDR_FULL_MENU. Если Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ· мСню Menu строку Restrict, Ρ‚ΠΎ мСню прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° мСню IDR_RESTRICT_MENU. Π­Ρ‚ΠΎ сокращСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ мСню IDR_FULL_MENU, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ строки, Π° строка Process пСрСнСсСна ΠΈΠ· мСню Mission Π² мСню File.

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ строки мСню IDR_FULL_MENU ΠΈ IDR_RESTRICT_MENU ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π΅ΠΆΠΈΠΌΡ‹ отобраТСния строк мСню. Π’Π°ΠΊ, ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈΠ· мСню Menu строки Disable, блокируСтся строка Process Π² мСню Mission. Около строки Disable ΠΏΡ€ΠΈ этом отобраТаСтся символ √ (рис. 3.3). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ строку Disable ΠΈΠ· мСню Menu Π΅Ρ‰Π΅ Ρ€Π°Π·. Π‘ΠΈΠΌΠ²ΠΎΠ» √ Ρ‚Π°ΠΊΠΆΠ΅ исчСзнСт.

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ строки Process ΠΈΠ· мСню Mission Π½Π° экранС появляСтся сообщСниС. Когда строка Process Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π°, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΅Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Если Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ· мСню Mission строку Construction, Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° символом β€’. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ этой строки снимаСт с Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния MultiMenu, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· мСню File строку Exit ΠΈΠ»ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· систСмного мСню прилоТСния строку Close. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ строки мСню прилоТСния Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Для ускорСния Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· мСню прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ клавишами аксСлСрации. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ.

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ клавиш Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ строка мСню <Ctrl+D> Π‘Ρ‚Ρ€ΠΎΠΊΠ° Disable ΠΈΠ· мСню Menu <Ctrl+P> Π‘Ρ‚Ρ€ΠΎΠΊΠ° Process ΠΈΠ· мСню Mission ΠΈΠ»ΠΈ ΠΈΠ· мСню File (для сокращСнного Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° мСню) <Ctrl+E> Π‘Ρ‚Ρ€ΠΎΠΊΠ° Exit ΠΈΠ· мСню File Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MultiMenu

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ MultiMenu ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π° класса – Π³Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния CStateApp ΠΈ класс Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния CStateWindow.

Π“Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния CMultiMenuApp

Π“Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния CMultiMenuApp наслСдуСтся ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CWinApp. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ MultiMenuApp класса CMultiMenuApp объявлСн ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ создаСтся сразу послС запуска прилоТСния.

Π’ класс CMultiMenuApp Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ InitInstance. Он создаСт Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния, прСдставлСнноС классом CMultiMenuWindow, наслСдованным ΠΎΡ‚ класса CFrameWnd .

Класс Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния CMultiMenuWindow

Класс CMultiMenuWindow управляСт Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ прилоТСния, создаСт мСню, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ панСль управлСния Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСния, Π² Ρ‚ΠΎΠΌ числС ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния ΠΎΡ‚ мСню.

ЀактичСски всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС CMultiMenuWindow, ΠΌΠΎΠΆΠ½ΠΎ условно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠΏΠ°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnCreate. Он ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСниС WM_CREATE, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания ΠΎΠΊΠ½Π° прилоТСния. Вторая Π³Ρ€ΡƒΠΏΠΏΠ° состоит ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” OnDisable, OnCommand, OnExit, OnConstruct, OnRestrictMenu ΠΈ OnFullMenu. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ΠΎΡ‚ мСню прилоТСния. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ‚Ρ€Π΅Ρ‚ΡŒΡ Π³Ρ€ΡƒΠΏΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° - OnUpdateProcess, OnUpdateConstruct ΠΈ OnUpdateDisable, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… строк мСню прилоТСния.

Π’ состав класса Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ нСсколько элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Ρ„Π»Π°Π³ΠΈ bEnable, bRadio ΠΈ nCheck, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ характСристиками Ρ‚Ρ€Π΅Ρ… строк мСню, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ m_wndStatusBar класса CStatusBar, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ панСль состояния нашСго прилоТСния.

Рассмотрим ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса CMultiMenuWindow Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса CMultiMenuWindow

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса CMultiMenuWindow ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ мСню, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ аксСлСраторов ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π»Π°Π³ΠΎΠ².

Для создания ΠΎΠΊΠ½Π° прилоТСния вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Create класса CFrameWnd. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Create ΡΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ с мСню, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IDR_MENU:

Create(NULL, "Status Bar Sample", WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU));

Π—Π°Ρ‚Π΅ΠΌ выполняСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ аксСлСраторов IDR_ACCELERATOR с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° LoadAccelTable класса CFrameWnd:

LoadAccelTable(MAKEINTRESOURCE(IDR_ACCELERATOR));

И, Π² ΠΊΠΎΠ½Ρ†Π΅, конструктор устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³ΠΎΠ² bEnable, bRadio ΠΈ nCheck. Π€Π»Π°Π³Π°ΠΌ bEnable ΠΈ bRadio присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ TRUE, Π° Ρ„Π»Π°Π³Ρƒ nCheck – Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’Π°Π±Π»ΠΈΡ†Π° сообщСний класса CMultiMenuWindow

Π’Π°Π±Π»ΠΈΡ†Π° сообщСний класса CMultiMenuWindow ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния ΠΎΡ‚ мСню прилоТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ содСрТит ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ON_WM_CREATE.

ΠœΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° ON_WM_CREATE Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnCreate Π²ΠΎ врСмя создания ΠΎΠΊΠ½Π°:

ON_WM_CREATE()

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ΠΎΡ‚ мСню прилоТСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ сообщСний класса CMultiMenuWindow Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΡˆΠ΅ΡΡ‚ΡŒ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄ ON_COMMAND. Они Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ OnDisable, OnConstruct, OnCommand, OnFullMenu, OnRestrictMenu ΠΈ OnMenuExit:

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. Они Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ OnUpdateProcess, OnUpdateConstruct ΠΈ OnUpdateDisable:

ON_UPDATE_COMMAND_UI(ID_MISSION_PROCESS, OnUpdateProcess)

ON_UPDATE_COMMAND_UI(ID_MISSION_CONSTRUCT, OnUpdateConstruct)

ON_UPDATE_COMMAND_UI(ID_MENU_DISABLE, OnUpdateDisable)

БоотвСтствиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ON_COMMAND ΠΈ ON_UPDATE_COMMAND_UI, строкам мСню прилоТСния Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ рСсурсов прилоТСния, прСдставлСнном Π² листингС 3.3.

ΠœΠ΅Ρ‚ΠΎΠ΄ OnCreate класса CMultiMenuWindow

ΠœΠ΅Ρ‚ΠΎΠ΄ OnCreate класса CMultiMenuWindow сначала Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnCreate Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CFrameWnd , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния:

if (CFrameWnd::OnCreate(lpCreateStruct) == –1) return –1;

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм панСль состояния, указывая Π² качСствС Π΅Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния. Для этого ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Create ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° m_wndStatusBar, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ панСль состояния, пСрСдавая Π΅ΠΌΡƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ прилоТСния являСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ для ΠΏΠ°Π½Π΅Π»ΠΈ состояния: