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

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

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

Рис. 3.1. Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ мСню ΠΈ диалоговая панСль Menu Item Properties


ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² строкС мСню, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ввСсти Π² ΠΏΠΎΠ»Π΅ Caption. Π—Π°Ρ‚Π΅ΠΌ Π² спискС с ΠΏΠΎΠ»Π΅ΠΌ рСдактирования ID Π½Π°Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ для этой строки мСню. Если Π²Ρ‹ Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅ ID, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° основС ΠΈΠΌΠ΅Π½ΠΈ мСню ΠΈ строки.

Π’ ΠΏΠΎΠ»Π΅ Prompt Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта мСню Π² ΠΏΠ°Π½Π΅Π»ΠΈ состояния прилоТСния. Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов Microsoft Visual C++ создаст для Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ тСкста Π½ΠΎΠ²Ρ‹ΠΉ строковый рСсурс ΠΈ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ» рСсурсов прилоТСния, присвоив Π΅ΠΌΡƒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎ ΠΈ мСню. Π’Π°ΠΊ ΠΊΠ°ΠΊ строки мСню ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡ… тСкст, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Ρ‚ΠΎ MFC смоТСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… вмСстС. ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ строки мСню, MFC просто Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ строковый рСсурс с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π² ΠΏΠ°Π½Π΅Π»ΠΈ состояния.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Menu Item Properties Π·Π°Π΄Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ характСристики строк мСню, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π° ΠΈΡ… внСшний Π²ΠΈΠ΄. Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΡ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Microsoft Visual C++.

Π’Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свойства ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… строк мСню. Для этого Π½Π°Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎ Π½ΠΈΠΌ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ. На экранС появится ΡƒΠΆΠ΅ описанная Π½Π°ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ диалоговая панСль Menu Item Properties, которая ΡƒΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ строки мСню.

МСню бСз класса CMenu

Как ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, для управлСния мСню Π² состав Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов MFC Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс – класс CMenu. Класс CMenu – ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… классов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MFC. Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с мСню, Π½ΠΎ всС ΠΆΠ΅ Π² исходных тСкстах Π²Ρ‹ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого класса.

Π’ прилоТСниях, созданных с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ MFC AppWizard мСню создаСтся автоматичСски вмСстС с панСлью управлСния ΠΈ панСлью состояния. Для этого достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании шаблона Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ этих рСсурсов:

// ОбъявляСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° шаблон Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

CSingleDocTemplate* pDocTemplate;


// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ шаблон Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

pDocTemplate = new CSingleDocTemplate(

 IDR_MAINFRAME,                // Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню, ΠΏΠ°Π½Π΅Π»ΠΈ

                               // управлСния ΠΈ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

 RUNTIME_CLASS(CSingleDoc),    // Класс Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

 RUNTIME_CLASS(CMainFrame),    // Класс Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°

 RUNTIME_CLASS(CSingleView));  // Класс ΠΎΠΊΠ½Π° просмотра

Π’ случаС ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ рСсурсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠ³Π΄Π° всС ΠΎΠΊΠ½Π° просмотра Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹. ВсС эти рСсурсы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, прСдставлСнном Π½ΠΈΠΆΠ΅, это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IDRMAINFRAME:

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния

CMainFrame* pMainFrame = new CMainFrame;


// Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ рСсурсы с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDR_MAINFRAME,

// Π² Ρ‚ΠΎΠΌ числС ΠΈ мСню

if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE;

Π’ прилоТСниях MFC AppWizard, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ интСрфСйс, мСню создаСтся ΠΈ измСняСтся самой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ MFC. НСсмотря Π½Π° это, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ мСню. Π‘Π°ΠΌΡ‹ΠΉ простой способ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ обновлСния ΠΎΡ‚ мСню. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ использования этих ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΡ‹ посвятили Ρ€Π°Π·Π΄Π΅Π» β€œΠšΠ»Π°ΡΡ CCmdUI”.

Π”Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ создано Π±Π΅Π· использования срСдств MFC AppWizard, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания мСню остаСтся ΠΎΡ‡Π΅Π½ΡŒ простой ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CMenu Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π’ Ρ‚Π°ΠΊΠΈΡ… прилоТСниях, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, создаСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π½Π° основС класса CFrameWnd. Для этого сначала создаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CFrameWnd, Π° Π·Π°Ρ‚Π΅ΠΌ вызываСтся Π»ΠΈΠ±ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Create, Π»ΠΈΠ±ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ LoadFrame, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΡƒΠΆΠ΅ создаСт само ΠΎΠΊΠ½ΠΎ вмСстС с мСню.

ΠœΠ΅Ρ‚ΠΎΠ΄ Create

ΠœΠ΅Ρ‚ΠΎΠ΄ Create создаСт ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΊΠ½ΠΎ, связанноС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ CFrameWnd. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Create Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС – ноль:

BOOL Create(

 LPCTSTR lpszClassName, // Класс ΠΎΠΊΠ½Π°

 LPCTSTR lpszWindowName, // Имя ΠΎΠΊΠ½Π°

 DWORD dwStyle = WS_OVERLAPPEDWINDOW, // Π’ΠΈΠΏ ΠΎΠΊΠ½Π°

 const RECT& rect = rectDefault, // РасполоТСниС ΠΎΠΊΠ½Π°

 CWnd* pParentWnd = NULL, // Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ

 LPCTSTR lpszMenuName = NULL, // МСню

 DWORD dwExStyle = 0, // Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅

 // характСристики ΠΎΠΊΠ½Π°

 CCreateContext* pContext = NULL); // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для

                                   // ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°

                                   // Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚/ΠΎΠΊΠ½ΠΎ просмотра

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Create. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lpszClassName слуТит для задания класса ΠΎΠΊΠ½Π°. Π’ качСствС Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ использован класс, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ для ΠΎΠΊΠΎΠ½ CFrameWnd. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lpszWindowName ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ имя ΠΎΠΊΠ½Π° – ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π°.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. Если ΠΈΡ… Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ значСния, принятыС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Нас, ΠΎΠ΄Π½Π°ΠΊΠΎ, сСйчас интСрСсуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lpszMenuName. Π§Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя рСсурса мСню, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ создано для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов Microsoft Visual C++ присваиваСт созданным Π² Π½Π΅ΠΌ рСсурсам, Π² Ρ‚ΠΎΠΌ числС мСню, числовыС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, совмСстимоС ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ lpszMenuName, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρƒ MAKEINTRESOURCE.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ с мСню:

CMultiMenuWindow::CMultiMenuWindow() {

 // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ прилоТСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅

 // Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса CMultiMenuWindow

 Create(NULL, "Multi Menu Sample", WS_OVERLAPPEDWINDOW,  rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU));

}

Класс CMultiMenuWindow, конструктор ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ прСдставлСн Π²Ρ‹ΡˆΠ΅, наслСдован ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CFrameWnd. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ CMultiMenuWindow создаСт ΠΎΠΊΠ½ΠΎ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Multi Menu Sample. Π­Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСню IDR_MENU. МСню с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDR_MENU Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ рСсурсов прилоТСния.

ΠœΠ΅Ρ‚ΠΎΠ΄ LoadFrame

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ LoadFrame позволяСт динамичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° рСсурсов. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ LoadFrame Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС – ноль:

virtual BOOL LoadFrame(UINT nIDResource, DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE, CWnd* pParentWnd = NULL, CCreateContext* pContext = NULL);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° LoadFrame практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Create, описанного Ρ€Π°Π½Π΅Π΅. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ составляСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – nIDResource. Он прСдставляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΎΠ±Ρ‰ΠΈΠΉ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… рСсурсов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°. К Ρ‚Π°ΠΊΠΈΠΌ рСсурсам относятся мСню (Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ мСню ΠΎΠΊΠ½Π°), строковый рСсурс (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°), ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (отобраТаСтся Π² случаС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π°) ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° клавиш аксСлСрации (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ускорСнного Π²Ρ‹Π±ΠΎΡ€Π° строк мСню).

Класс CMenu

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ мСню ΠΈ Π±Π΅Π· использования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Create ΠΈΠ»ΠΈ LoadFrame. Для этого Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CMenu ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса CMenu Π½Π΅ являСтся мСню, ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдставляСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ мСню. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CMenu ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Π° послС использования ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. На мСню это Π½Π΅ повлияСт:

{

 CMenu myMenu;

}

ΠœΠ΅Ρ‚ΠΎΠ΄ LoadMenu

ПослС объявлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса CMenu Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ мСню ΠΈΠ· рСсурсов прилоТСния, воспользовавшись для этой Ρ†Π΅Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ LoadMenu. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ LoadMenu Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ Π½ΡƒΠ»ΡŒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС:

BOOL LoadMenu(LPCTSTR lpszResourceName);

BOOL LoadMenu(UINT nIDResource);

ΠœΠ΅Ρ‚ΠΎΠ΄ LoadMenu Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ мСню, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ lpszResourceName ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ nIDResource, ΠΈ свяТСт Π΅Π³ΠΎ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса CMenu. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для управлСния Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ мСню Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса CMenu.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ мСню Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ β€œΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒβ€ ΠΊ ΠΎΠΊΠ½Ρƒ. Для этого слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SetMenu входящим Π² класс CWnd.

ΠœΠ΅Ρ‚ΠΎΠ΄ SetMenu класса CWnd

Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° pMenu ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ SetMenu ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CMenu, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ мСню. Если Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ мСню, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΎΠΊΠ½ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ SetMenu Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL:

BOOL SetMenu(CMenu* pMenu);

Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ SetMenu Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС SetMenu Π²Π΅Ρ€Π½Π΅Ρ‚ ноль.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ установили мСню, Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ SetMenu, ΠΈ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ CMenu Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½, Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Detach класса CMenu. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·ΠΎΡ€Π²Π΅Ρ‚ связь ΠΌΠ΅ΠΆΠ΄Ρƒ мСню ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса CMenu, послС Ρ‡Π΅Π³ΠΎ послСдний ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½:

HMENU Detach();

ΠœΠ΅Ρ‚ΠΎΠ΄ Detach Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню, Π° Π² случаС ошибки – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL.