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

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

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

Π€Π°ΠΉΠ» afxext.h Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΌ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ классы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для создания ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, Π² Ρ‚ΠΎΠΌ числС сам класс ΠΏΠ°Π½Π΅Π»ΠΈ управлСния – CToolBar.

ΠšΡ€ΠΎΠΌΠ΅ систСмных Ρ„Π°ΠΉΠ»ΠΎΠ² afxwin.h ΠΈ afxext.h, Π² исходный тСкст Ρ„Π°ΠΉΠ»Π° Bar.cpp Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» resource.h. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» создаСтся автоматичСски Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ рСсурсов Microsoft Visual C++ ΠΈ содСрТит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² прилоТСния.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Bar ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π° класса CBarApp ΠΈ CBarWindow. Π“Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния CBarApp наслСдуСтся ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CWinApp. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ MyBarApp класса CBarApp объявлСн ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ создаСтся сразу послС запуска прилоТСния.

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

ВзаимодСйствиС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния ΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса ΠΎΠΊΠ½Π° прилоТСния ΠΌΡ‹ описывали Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ сСрии β€œΠ‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° систСмного программиста”, посвящСнной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π² Microsoft Visual C++ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов MFC.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² состав класса CBarWindow Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ m_wndToolBar класса CToolBar. ИмСнно этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ панСль управлСния. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса CToolBar Π² состав класса Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния Π²ΠΏΠΎΠ»Π½Π΅ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ панСль управлСния, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ мСню, являСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния:

class CBarWindow : public CFrameWnd {

protected:

 CToolBar m_wndToolBar;

// …

}

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ m_wndToolBar, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ панСль управлСния, объявлСн ΠΊΠ°ΠΊ protected. Доступ ΠΊ Π½Π΅ΠΌΡƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса CBarWindow. Если Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ доступ ΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния ΠΈΠ· Π²Π½Π΅ класса CBarWindow,  Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово protected Π½Π°Π΄ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° public.

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сообщСний класса CBarWindow находится ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° ON_WM_CREATE. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² процСссС создания Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ OnCreate. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnCreate для создания ΠΏΠ°Π½Π΅Π»ΠΈ управлСния.

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

ПослС создания ΠΏΠ°Π½Π΅Π»ΠΈ управлСния вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ LoadToolBar, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ панСль управлСния с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDR_MAINFRAME. Если Π²Ρ‹ запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ, Ρ‚ΠΎ Π² случаС возникновСния ошибок ΠΏΡ€ΠΈ создании ΠΏΠ°Π½Π΅Π»ΠΈ управлСния вызываСтся ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° TRACE0. Она ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС Π½Π° страницС Debug ΠΏΠ°Π½Π΅Π»ΠΈ Output. ПанСль Output ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ располагаСтся Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΎΠΊΠ½Π° Microsoft Visual C++.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, Π² ΠΎΠΊΠ½ΠΎ прилоТСния, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ этих ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний соотвСтствуСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния ΠΎΡ‚ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ сообщСний класса CBarWindow Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ON_COMMAND. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Bar ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния β€” ID_FILE_OPEN, ID_FILE_SAVE ΠΈ ID_TOOL_EXIT:

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

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

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

BEGIN_MESSAGE_MAP(CBarWindow, CFrameWnd)


 // ΠœΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° сообщСния

 // WM_CREATE. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСния вызываСтся

 // ΠΌΠ΅Ρ‚ΠΎΠ΄ OnCreate

   ON_WM_CREATE()


 // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСний ΠΎΡ‚ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния

 ON_COMMAND(ID_FILE_OPEN, CBarWindow::BarCommand)

 ON_COMMAND(ID_FILE_SAVE, CBarWindow::BarCommand)

 ON_COMMAND(ID_TOOL_EXIT, CBarWindow::BarCommand)


END_MESSAGE_MAP()

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ исходный тСкст прилоТСния ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ΠΎΡ‚ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ BarCommand. ΠœΠ΅Ρ‚ΠΎΠ΄ BarCommand Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав класса CBarWindow. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ BarCommand – это Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран сообщСниС, Ρ‡Ρ‚ΠΎ данная ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния свой собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π°ΠΌΠΈ дСйствия.

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

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, создаваСмыС с использованиСм срСдств MFC AppWizard, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ панСль управлСния. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях этого явно нСдостаточно. Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ прилоТСния, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ офисных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Microsoft ΠΈ графичСских Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ°Π½Π΅Π»Π΅ΠΉ.

ПолоТСниС ΠΏΠ°Π½Π΅Π»ΠΈ управлСния

ПанСль управлСния прилоТСния Bar нСльзя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ с ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΊΠ½Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ нСльзя Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅, нСзависимом ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ это Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, установив Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Create Ρ„Π»Π°Π³ CBRS_TOP ΠΈΠ»ΠΈ CBRS_BOTTOM.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ смогли ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ панСль управлСния с ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΊΠ½Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π΄ΠΎ:

1. Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния для ΠΎΠΊΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит панСль управлСния. Для этого слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ EnableDocking Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ EnableDocking являСтся элСмСнтом класса CFrameWnd

2. Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ для самой ΠΏΠ°Π½Π΅Π»ΠΈ управлСния. Для этого слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ EnableDocking ΠΏΠ°Π½Π΅Π»ΠΈ управлСния. ΠœΠ΅Ρ‚ΠΎΠ΄ EnableDocking являСтся элСмСнтом класса CControlBar

3. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ панСль управлСния ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· сторон ΠΎΠΊΠ½Π° прилоТСния ΠΈΠ»ΠΈ вывСсти Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ DockControlBar ΠΈΠ»ΠΈ FloatControlBar Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ DockControlBar ΠΈ FloatControlBar ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнтами класса CFrameWnd

Если Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ отобраТаСтся нСсколько ΠΏΠ°Π½Π΅Π»Π΅ΠΉ управлСния, Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для этого ΠΎΠΊΠ½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ EnableDocking, Π° Π·Π°Ρ‚Π΅ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ EnableDocking ΠΈ DockControlBar (ΠΈΠ»ΠΈ FloatControlBar).

Если Π²Ρ‹ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΠ½ΠΊΡ‚ ΠΈΠ· Ρ‚Ρ€Π΅Ρ…, пСрСчислСнных Π²Ρ‹ΡˆΠ΅, панСль управлСния Π±ΡƒΠ΄Π΅Ρ‚ ТСстко привязана ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ† ΠΎΠΊΠ½Π°, ΠΈΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² CFrameWnd::EnableDocking, CControlBar::EnableDocking, Π° Ρ‚Π°ΠΊΠΆΠ΅ CFrameWnd::DockControlBar ΠΈ CFrameWnd::FloatControlBar ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΊΠ½Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ панСль управлСния. Рассмотрим эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

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

ΠœΠ΅Ρ‚ΠΎΠ΄ EnableDocking класса CFrameWnd Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ пристыковку ΠΏΠ°Π½Π΅Π»ΠΈ управлСния ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌ ΠΎΠΊΠ½Π°:

void EnableDocking(DWORD dwDockStyle);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ dwDockStyle Π·Π°Π΄Π°Π΅Ρ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΊΠ½Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ панСль управлСния. Π’ качСствС этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΈΠ· Ρ„Π»Π°Π³ΠΎΠ², пСрСчислСнных Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π€Π»Π°Π³ ОписаниС CBRS_ALIGN_TOP ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_BOTTOM ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_LEFT ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_RIGHT ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_ANY ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ любой Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° ΠœΠ΅Ρ‚ΠΎΠ΄ EnableDocking класса CControlBar

Π§Ρ‚ΠΎΠ±Ρ‹ панСль управлСния ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ с ΠΎΠ΄Π½ΠΎΠΉ стороны ΠΎΠΊΠ½Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ EnableDocking для ΠΎΠΊΠ½Π° ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния (Ссли ΠΈΡ… нСсколько).

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° EnableDocking класса CFrameWnd соотвСтствуСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° EnableDocking класса CControlBar. Однако Π½Π°Π±ΠΎΡ€ Ρ„Π»Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° dwStyle, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½:

void EnableDocking(DWORD dwStyle);

Π€Π»Π°Π³ ОписаниС CBRS_ALIGN_TOP ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_BOTTOM ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_LEFT ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_RIGHT ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π° CBRS_ALIGN_ANY ПанСль управлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚Ρ‹ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ любой Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π°

Если Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π»Π°Π³ΠΎΠ² Π½Π΅ установлСн, ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ dwStyle Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ данная панСль управлСния Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пристыкована Π½ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ ΠΎΠΊΠ½Π°. Π’ этом случаС Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ CFrameWnd::FloatControlBar ΠΈ панСль управлСния появится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΠ½ΠΈ-ΠΎΠΊΠ½Π΅.