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

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

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

if (!m_wndStatusBar.Create(this)) {

 // Ошибка ΠΏΡ€ΠΈ создании ΠΏΠ°Π½Π΅Π»ΠΈ состояния

 TRACE0("Failed to create status bar\n");

 return -1;  

}

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ панСль состояния создана, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π½Π° Π½Π΅ΠΉ СдинствСнный ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ SetIndicators. Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ SetIndicators ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ этого СдинствСнного ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠ°Π½Π΅Π»ΠΈ состояния, записанный Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ indicator. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° SetIndicators, Ρ€Π°Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅. Он опрСдСляСт, Ρ‡Ρ‚ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² ΠΏΠ°Π½Π΅Π»ΠΈ состояния Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½:

if (!m_wndStatusBar.SetIndicators(&indicator,1)) {

 // Ошибка ΠΏΡ€ΠΈ установкС ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°

 TRACE0("Failed to set indicators\n");

 return -1;  

}

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… устройства ΠΏΠ°Π½Π΅Π»Π΅ΠΉ состояния ΠΌΡ‹ расскаТСм Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ β€œΠŸΠ°Π½Π΅Π»ΡŒ состояния”.

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

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· мСню Menu строку Disable ΠΈΠ»ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ клавиш <Ctrl+D>, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ поступаСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ID_MENU_DISABLE. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого сообщСния вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ OnDisable класса CMultiMenuWindow. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ измСняСт состояниС Ρ„Π»Π°Π³ΠΎΠ² bEnable ΠΈ nCheck.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° bEnable измСняСтся с TRUE Π½Π° FALSE ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° bEnable с 1 Π½Π° 0 ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚:

bEnable = !bEnable;

nCheck = (nCheck == 1) ? 0 : 1;

Π‘Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnDisable Π½Π΅ мСняСт состояния строк мСню прилоТСния, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³ΠΎΠ² bEnable ΠΈ nCheck фиксируСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ обновлСния мСню.

Π’Π°ΠΊ, Ρ„Π»Π°Π³ bEnable управляСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ строки Process мСню Mission (для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° мСню) ΠΈ строки Process мСню File (для ΡƒΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° мСню). Π€Π»Π°Π³ bEnable провСряСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ OnUpdateProcess, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ обновлСния ΠΎΡ‚ этих строк мСню.

Π€Π»Π°Π³ nCheck управляСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ символа √  ΠΎΠΊΠΎΠ»ΠΎ строки Disable мСню Menu. Π€Π»Π°Π³ nCheck провСряСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ OnUpdateDisable, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ обновлСния ΠΎΡ‚ этой строки мСню.

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

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ строку Process ΠΈΠ· мСню File (для ΡƒΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° мСню) ΠΈΠ»ΠΈ ΠΈΠ· мСню Mission (для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° мСню), ΠΈΠ»ΠΈ просто Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ клавиш <Ctrl+P>, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ поступаСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ID_MISSION_PROCESS. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого сообщСния вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ CMultiMenuWindow класса CMultiMenuWindow. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π° экранС сообщСниС Command not implemented.

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

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· мСню Mission строку Construction, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ поступаСт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ID_MISSION_CONSTRUCT. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого сообщСния вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ OnConstruct класса CMultiMenuWindow. ΠœΠ΅Ρ‚ΠΎΠ΄ OnConstruct измСняСт состояниС Ρ„Π»Π°Π³Π° bRadio, мСняя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ bRadio с TRUE Π½Π° FALSE ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚:

bRadio = !bRadio;

Π€Π»Π°Π³ bRadio управляСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ символа β€’ ΠΎΠΊΠΎΠ»ΠΎ строки Construction мСню Mission. Π€Π»Π°Π³ bRadio провСряСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ OnUpdateConstruct, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ обновлСния ΠΎΡ‚ этой строки мСню.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ OnRestrictMenu ΠΈ OnFullMenu класса CMultiMenuWindow

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MultiMenu ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° мСню, ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈ ΡƒΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ мСню Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ строки Restrict ΠΈ Full мСню Menu. Если Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ мСню, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡƒΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, слСдуСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· мСню Menu строку Restrict. Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ мСню с ΡƒΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π½Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ, Π½Π°Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· мСню Menu строку Full.

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ строк Restrict ΠΈ Full ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ IDR_RESTRICT_MENU ΠΈ IDR_FULL_MENU, соотвСтствСнно. Для ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ OnRestrictMenu ΠΈ OnFullMenu. По сути, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ OnRestrictMenu ΠΈ OnFullMenu практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnRestrictMenu замСняСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ мСню ΡƒΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ мСню (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню IDR_RESTRICT_MENU), Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ OnFullMenu мСняСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ мСню Π½Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ мСню (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ мСню IDR_FULL_MENU).

ΠœΠ΅Ρ‚ΠΎΠ΄ OnRestrictMenu Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ мСню ΠΎΠΊΠ½Π° прилоТСния. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ласса CMenu, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ это мСню, записываСтся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ pMenu:

pMenu = this->GetMenu();

Π—Π°Ρ‚Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ мСню удаляСтся, для Ρ‡Π΅Π³ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ DestroyMenu:

pMenu->DestroyMenu();

Π’Π΅ΠΏΠ΅Ρ€ΡŒ загруТаСтся рСсурс Π½ΠΎΠ²ΠΎΠ³ΠΎ мСню, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IDR_RESTRICT_MENU (ΠΈΠ»ΠΈ IDR_FULL_MENU для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnFullMenu):

CMenu menuRestrict; // НовоС мСню

menuRestrict.LoadMenu(IDR_RESTRICT_MENU);

Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅ мСню ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΎΠΊΠ½Ρƒ прилоТСния – вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ SetMenu класса ΠΎΠΊΠ½Π°. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΅ΠΌΡƒ пСрСдаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ menuRestrict, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²ΠΎΠ΅ мСню:

SetMenu(&menuRestrict);

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Detach , ΠΎΡ‚ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ мСню Π² β€œΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ плаваниС”, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π΅ Π΅Π³ΠΎ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° menuRestrict класса CMenu:

menuRestrict.Detach();

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

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния ΠΎΡ‚ строк Process мСню File ΠΈ Mission ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ OnUpdateProcess класса CMultiMenuWindow. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ»ΠΈ снимаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ со строки Process Π² зависимости ΠΎΡ‚ значСния Ρ„Π»Π°Π³Π° bEnable:

pCmdUI->Enable(bEnable);

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

Команда обновлСния ΠΎΡ‚ строки Construction мСню Mission пСрСдаСтся для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ OnUpdateConstruct класса CMultiMenuWindow. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ устанавливаСт ΠΈΠ»ΠΈ снимаСм ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ β€’ со строки Construction Π² зависимости ΠΎΡ‚ значСния Ρ„Π»Π°Π³Π° bRadio:

pCmdUI->SetRadio(bRadio);

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

Команда обновлСния ΠΎΡ‚ строки Disable мСню Menu пСрСдаСтся для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ OnUpdateDisable класса CMultiMenuWindow. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ устанавливаСт ΠΈΠ»ΠΈ снимаСм ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ √ ΡΠΎ строки Disable, Π² зависимости ΠΎΡ‚ значСния Ρ„Π»Π°Π³Π° nCheck:

pCmdUI->SetCheck(nCheck);

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

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹Π±Ρ€Π°Π² ΠΈΠ· мСню File строку Exit. Π’ этом случаС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ пСрСдаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ID_FILE_EXIT. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° ON_COMMAND ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сообщСний класса CStateWindow Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого сообщСния ΠΌΠ΅Ρ‚ΠΎΠ΄ OnMenuExit:

ON_COMMAND(ID_WORK_EXIT, OnMenuExit)

ΠœΠ΅Ρ‚ΠΎΠ΄ OnMenuExit Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния, для Ρ‡Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ DestroyWindow, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС CWnd, для Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния:

void CMultiMenuWindow::OnExit() {

 // Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

 DestroyWindow();

 return;

}

Component Gallery ΠΈ контСкстноС мСню

НовыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Windows 95 ΠΈ Windows NT вСрсии 4.0 ΠΈ прилоТСния, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ для Π½ΠΈΡ…, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡˆΠΈΡ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ, Ρ‡Π΅ΠΌ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии Windows. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ Π½Π° экранС появляСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ мСню, внСшний Π²ΠΈΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ зависит ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΌΡ‹ΡˆΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° контСкстного мСню. Π’ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Component Gallery располоТСн ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Pop-up Menu. Он позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ контСкстноС мСню ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ прилоТСния.

Если Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ контСкстноС мСню ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ Component Gallery ΠΏΠ°Π½Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Pop-up Menu ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Insert. На экранС появится диалоговая панСль Pop-up Menu. Π’ спискС Add pop-up menu to пСрСчислСны классы ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ. К ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ контСкстноС мСню. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ добавляСтся Π½ΠΎΠ²ΠΎΠ΅ мСню, состоящСС ΠΈΠ· Ρ‚Ρ€Π΅Ρ… строк, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ присваиваСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, состоящий ΠΈΠ· прСфикса CG_IDR_POPUP_, названия прилоТСния ΠΈ части названия класса ΠΎΠΊΠ½Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ мСню.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ опишСм Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Pop-up Menu ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Multi, рассмотрСнному Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ β€œΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Multi”.

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π² Microsoft Visual C++ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Multi, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ панСль Component Gallery, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Pop-up Menu ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Insert. На экранС появится диалоговая панСль Pop-up Menu (рис. 3.5). Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ· списка Add pop-up menu to класс CMultiView.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ добавляСтся Π½ΠΎΠ²ΠΎΠ΅ мСню, состоящСС ΠΈΠ· Ρ‚Ρ€Π΅Ρ… строк, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ присваиваСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ CG_IDR_POPUP_MULTI_VIEW.

Рис. 3.5. Диалоговая панСль Pop-up Menu


НазваниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° контСкстного мСню отобраТаСтся Π² ΠΏΠΎΠ»Π΅ Menu resource ID Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Pop-up Menu. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ.

НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ OK. Диалоговая панСль Pop-up Menu закроСтся. Π’ исходных тСкстах прилоТСния Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния, Π° ΠΊ рСсурсам Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΡΡ Π½ΠΎΠ²ΠΎΠ΅ мСню с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ CG_IDR_POPUP_MULTI_VIEW.

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов Microsoft Visual C++ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ шаблон контСкстного мСню ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ. Из Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строки, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Component Gallery ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строки Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Π°ΠΌ.

Когда Π²Ρ‹ построитС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ контСкстноС мСню ΠΎΠΊΠ½Π° Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ располоТСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ.

Рис. 3.6. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΠΎΠ΅ мСню, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Pop-up Menu


Π’ Ρ„Π°ΠΉΠ» рСсурсов Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ контСкстного мСню CG_IDR_POPUP_MULTI_VIEW. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΠ½ΠΎ Π½Π΅ отличаСтся ΠΎΡ‚ мСню, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ создавали ΠΈΠ»ΠΈ использовали Ρ€Π°Π½Π΅Π΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ мСню Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ строкой _POPUP_ (рис. 3.6). Π­Ρ‚Π° строка Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² контСкстном мСню.