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

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

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

Π§Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nID Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nStyle – Ρ€Π΅ΠΆΠΈΠΌ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ iImage – индСкс изобраТСния ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² рСсурсС ΠΏΠ°Π½Π΅Π»ΠΈ управлСния.

Если ΠΌΠ΅Ρ‚ΠΎΠ΄ GetButtonInfo вызываСтся для раздСлитСля, Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ iImage Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ индСкс изобраТСния, Π° ΡˆΠΈΡ€ΠΈΠ½Ρƒ раздСлитСля Π² пиксСлах.

Когда Π²Ρ‹ создаСтС Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ управлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ€Π³Π°Π½ управлСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Π΅ рСдактирования, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ области ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ. Для опрСдСлСния этих ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ GetItemRect класса CToolBar:

virtual void GetItemRect(int nIndex, LPRECT lpRect);

Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetItemRect заполняСт структуру lpRect ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ области, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ, с индСксом nIndex.

НСдокумСнтированныС возмоТности класса CMainFrame

Π˜Π·ΡƒΡ‡Π°Ρ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния DOCKTOOL, поставляСмого вмСстС с Microsoft Visual C++, ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ для отобраТСния ΠΈ удалСния с экрана ΠΏΠ°Π½Π΅Π»Π΅ΠΉ управлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnBarCheck.

ΠœΠ΅Ρ‚ΠΎΠ΄ вызываСтся ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сообщСний класса Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния CMainFrame. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° ON_COMMAND_EX. Π’ случаС ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ΠΎΡ‚ строк мСню, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π° ΠΏΠΎΠΊΠ°Π· Π½Π° экранС ΠΏΠ°Π½Π΅Π»Π΅ΠΉ управлСния, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ OnBarCheck ΠΈ Π΅ΠΌΡƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строки мСню:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

 // Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сообщСний

 ON_COMMAND_EX(IDW_BROWSE_BAR, OnBarCheck)

 ON_COMMAND_EX(IDW_DEBUG_BAR, OnBarCheck)

 ON_COMMAND_EX(IDW_EDIT_BAR, OnBarCheck)

END_MESSAGE_MAP()

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· мСню View прилоТСния строку с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, выдаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ строкС мСню ΠΈ самой ΠΏΠ°Π½Π΅Π»ΠΈ управлСния (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ управлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… строк мСню View). КомандноС сообщСниС обрабатываСтся Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ сообщСний класса CMainFrame. Для Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ OnBarCheck, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния.

Если Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnBarCheck Π² справочной систСмС Microsoft Visual C++, вас ΠΆΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅. Ни Π² класс CFrameWnd, Π½ΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов ΠΌΠ΅Ρ‚ΠΎΠ΄ OnBarCheck Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚. Когда Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡŒ ΠΊ исходным тСкстам самого прилоТСния, Π² Π½ΠΈΡ… Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ΠœΡ‹ проявили Π½Π°ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ смогли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnBarCheck Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходных тСкстах Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов MFC. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, нСсмотря Π½Π° отсутствиС описания ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnBarCheck Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MFC, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстный Π²Π°ΠΌ класс CFrameWnd.

Π’ Ρ„Π°ΠΉΠ»Π΅ Afxwin.h, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ объявлСн класс CFrameWnd, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ объявлСния входящих Π² Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² OnUpdateControlBarMenu ΠΈ OnBarCheck:

class CFrameWnd : public CWnd {

// ...

// Command Handlers

public:

 afx_msg void OnUpdateControlBarMenu(CCmdUI* pCmdUI);

 afx_msg BOOL OnBarCheck(UINT nID);

}

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ исходных тСкстов ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² OnUpdateControlBarMenu ΠΈ OnBarCheck содСрТатся Π² Ρ„Π°ΠΉΠ»Π΅ Winfrm.cpp.

Π’ Ρ„Π°ΠΉΠ»Π΅ Winfrm.cpp Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ обращСния ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ OnUpdateControlBarMenu ΠΈ OnBarCheck Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сообщСний класса CFrameWnd. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

BEGIN_MESSAGE_MAP(CFrameWnd, CWnd) 

 // turning on and off standard frame gadgetry

 ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR, OnUpdateControlBarMenu)

 ON_COMMAND_EX(ID_VIEW_STATUS_BAR, OnBarCheck)

 ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu)

 ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck)

END_MESSAGE_MAP()

Π”Π²Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄ ON_UPDATE_COMMAND_UI ΠΈ ON_COMMAND_EX Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ OnUpdateControlBarMenu ΠΈ OnBarCheck для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ID_VIEW_STATUS_BAR ΠΈ ID_VIEW_TOOLBAR. ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ строк Toolbar ΠΈ Status Bar мСню View.

МСню View, содСрТащСС строки Toolbar ΠΈ Status Bar, вставляСтся Π²ΠΎ всС прилоТСния с ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌ интСрфСйсом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ созданы с использованиСм срСдств MFC AppWizard.

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сами ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ OnBarCheck ΠΈ OnUpdateControlBarMenu. ΠœΠ΅Ρ‚ΠΎΠ΄ OnBarCheck класса CFrameWnd ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

//////////////////////////////////////////////////////////////

// ΠœΠ΅Ρ‚ΠΎΠ΄ OnBarCheck класса CFrameWnd

BOOL CFrameWnd::OnBarCheck(UINT nID){

 ASSERT(ID_VIEW_STATUS_BAR == AFX_IDW_STATUS_BAR);

 ASSERT(ID_VIEW_TOOLBAR == AFX_IDW_TOOLBAR);


 CControlBar* pBar = GetControlBar(nID);

 if (pBar != NULL) {

  ShowControlBar(pBar, (pBar->GetStyle() & WS_VISIBLE) == 0, FALSE);

  return TRUE;

 }

 return FALSE;

}

ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ вСрсия ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnBarCheck класса CFrameWnd провСряСт соотвСтствиС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ID_VIEW_STATUS_BAR, AFX_IDW_STATUS_BAR ΠΈ ID_VIEW_TOOLBAR, AFX_IDW_TOOLBAR. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ эти ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ Afxres.h ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

#define AFX_IDW_TOOLBAR    0xE800

#define AFX_IDW_STATUS_BAR 0xE801


#define ID_VIEW_TOOLBAR    0xE800

#define ID_VIEW_STATUS_BAR 0xE801

ΠœΠ΅Ρ‚ΠΎΠ΄ GetControlBar класса CFrameWnd опрСдСляСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CControlBar, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт панСль управлСния ΠΈΠ»ΠΈ панСль состояния с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ nID. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ строк мСню ID_VIEW_TOOLBAR ΠΈ ID_VIEW_STATUS_BAR ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ стандартным ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния AFX_IDW_TOOLBAR ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ состояния AFX_IDW_STATUS_BAR. 

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈΠ· мСню View строки Toolbar пСрСдаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС ID_VIEW_TOOLBAR, Π° ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ строки Status bar β€” сообщСниС ID_VIEW_STATUS_BAR. Π’ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих сообщСний, Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetControlBar ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CControlBar, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΈΠ±ΠΎ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния AFX_IDW_TOOLBAR, Π»ΠΈΠ±ΠΎ ΠΏΠ°Π½Π΅Π»ΠΈ состояния AFX_IDW_STATUS_BAR.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ShowControlBar ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ панСль. Если панСль Π±Ρ‹Π»Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ ShowControlBar скрываСт Π΅Π΅ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ устроСн ΠΌΠ΅Ρ‚ΠΎΠ΄ OnUpdateControlBarMenu класса CFrameWnd, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния ΠΎΡ‚ строк Toolbar ΠΈ Status bar мСню View).

ΠœΠ΅Ρ‚ΠΎΠ΄ OnUpdateControlBarMenu провСряСт, отобраТаСтся Π»ΠΈ Π½Π° экранС панСль управлСния ΠΈΠ»ΠΈ панСль состояния с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ обновлСния. Если панСль отобраТаСтся, Ρ‚ΠΎ строка мСню отмСчаСтся символом √:

//////////////////////////////////////////////////////////////

// ΠœΠ΅Ρ‚ΠΎΠ΄ OnUpdateControlBarMenu класса CFrameWnd

void CFrameWnd::OnUpdateControlBarMenu(CCmdUI* pCmdUI){

 ASSERT(ID_VIEW_STATUS_BAR == AFX_IDW_STATUS_BAR);

 ASSERT(ID_VIEW_TOOLBAR == AFX_IDW_TOOLBAR);


 CControlBar* pBar = GetControlBar(pCmdUI->m_nID);

 if (pBar != NULL)   {

  pCmdUI->SetCheck((pBar->GetStyle() & WS_VISIBLE) != 0);

  return;

 }

 pCmdUI->ContinueRouting();

}

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnUpdateControlBarMenu класса CFrameWnd вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ ContinueRouting класса CCmdUI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ направляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ обновлСния для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам MFC (см. Ρ€Π°Π·Π΄Π΅Π» β€œ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ”).

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MultiBar

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ MultiBar. Π’ качСствС Ρ‚ΠΈΠΏΠ° прилоТСния Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ· списка Type строку Application. НастройтС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ MultiBar, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π²Ρ‹ настраивали ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Bar – ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ классов MFC.

НабСритС Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ исходный тСкст прилоТСния ΠΈ сохранитС Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ MultiBar.cpp (листинг 3.7). Π—Π° основу Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» Bar.cpp прилоТСния Bar. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» MultiBar.cpp Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Листинг 3.7. Π€Π°ΠΉΠ» MultiBar.cpp

//============================================================

// ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MultiBar

// (c) Frolov G.V., 1996

// E-mail: [email protected]

//============================================================

// Π˜ΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ опрСдСлСния ΠΈΠ·

// Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

#define VC_EXTRALEAN


// Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» для MFC

#include <afxwin.h>

#include <afxext.h>

#include <afxcmn.h>


// Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» для рСсурсов прилоТСния

#include "resource.h"


//============================================================

// Класс CMultiBarApp - Π³Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния

//============================================================

class CMultiBarApp : public CWinApp {

public:

 // ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ InitInstance

 virtual BOOL InitInstance();

};


// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ класса CMultiBarApp

CMultiBarApp MultiBarApp;


//============================================================

// Класс CExtendedBar - класс ΠΏΠ°Π½Π΅Π»ΠΈ управлСния Extended

//============================================================

class CExtendedBar : public CToolBar {

public:

 // Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡ€Π³Π°Π½Ρ‹ управлСния ΠΏΠ°Π½Π΅Π»ΠΈ Extended

 CEdit m_edit;          // тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

 CComboBox m_combo_box; // список с тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ

};


//============================================================

// Класс CMultiBarWindow - прСдставляСт Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ

//============================================================

class CMultiBarWindow : public CFrameWnd {

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния