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

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

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

 LoadStdProfileSettings();


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

 CMultiDocTemplate* pDocTemplate;

 pDocTemplate = new CMultiDocTemplate(IDR_MULTITYPE, RUNTIME_CLASS(CMultiDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CMultiView));


 // РСгистрируСм шаблон Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

 AddDocTemplate(pDocTemplate);


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

 CMainFrame* pMainFrame = new CMainFrame;

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

 m_pMainWnd = pMainFrame;


 // ВыполняСм ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

 // прилоТСния

 CCommandLineInfo cmdInfo;

 ParseCommandLine(cmdInfo);


 // ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку прилоТСния

 if (!ProcessShellCommand(cmdInfo)) return FALSE;


 // ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ

 pMainFrame->ShowWindow(m_nCmdShow);

 pMainFrame->UpdateWindow();


 return TRUE;

}

Π’ Π½Π°Ρ‡Π°Π»Π΅ InitInstance Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Enable3dControls ΠΈ LoadStdProfileSettings. Они ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ описаны Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ‚ΠΎΠΌΠ΅ сСрии β€œΠ‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° систСмного программиста”, посвящСнном MFC, поэтому ΠΌΡ‹ Π½Π΅ станСм Π½Π° Π½ΠΈΡ… ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ шаблонов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° прилоТСния.

Π—Π°Ρ‚Π΅ΠΌ создаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ pDocTemplate Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса шаблона Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Для ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ это класс CSingleDocTemplate, Π° для ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… – CMultiDocTemplate. БоздаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π³ΠΎ записываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ pDocTemplate. Для создания шаблона Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρƒ класса CMultiDocTemplate ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

CMultiDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass);

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nIDResource опрСдСляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ рСсурсов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… совмСстно с Ρ‚ΠΈΠΏΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², управляСмых шаблоном. К Ρ‚Π°ΠΊΠΈΠΌ рСсурсам относятся мСню, ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, строковый рСсурс, Ρ‚Π°Π±Π»ΠΈΡ†Π° аксСлСраторов. Для прилоТСния Multi Π² этом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΡƒΠΊΠ°Π·Π°Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IDR_MULTITYPE.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° pDocClass, pFrameClass ΠΈ pViewClass содСрТат ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CRuntimeClass, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄ RUNTIME_CLASS ΠΈΠ· классов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° CMultiDoc, Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° MDI CChildFrame ΠΈ ΠΎΠΊΠ½Π° просмотра CMultiView. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, шаблон Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΡ‚Π½ΠΎΡΡΡ‰ΡƒΡŽΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ шаблон Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² заносится Π² список шаблонов, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Для этого ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° созданный шаблон Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ AddDocTemplate ΠΈΠ· класса CWinApp. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° шаблон Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ pTemplate:

void AddDocTemplate(CDocTemplate* pTemplate);

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ pTemplate Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CDocTemplate, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CMultiDocTemplate. Π­Ρ‚ΠΎ допустимо, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ класс CDocTemplate являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом для CMultiDocTemplate.

Если Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, основанноС Π½Π° ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠΌ интСрфСйсС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния управляСт ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса шаблона Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Они, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ созданиСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Один шаблон ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для всСх Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

ПослС создания шаблона Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° создаСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ MDI (Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния).

Для создания Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния ΠΌΡ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CMainFrame ΠΈ записываСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π³ΠΎ Π² pMainFrame. Класс CMainFrame ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠœΡ‹ расскаТСм ΠΎ Π½Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅:

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

CMainFrame* pMainFrame = new CMainFrame;

Π—Π°Ρ‚Π΅ΠΌ для Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ LoadFrame класса CFrameWnd. Он создаСт ΠΎΠΊΠ½ΠΎ, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ рСсурсы, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, ΠΈ связываСт ΠΈΡ… с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса CMainFrame. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° LoadFrame опрСдСляСт мСню, ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ аксСлСраторов ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ строк Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния:

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

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ являСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ MDI, записываСтся Π² элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… m_pMainWnd Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… m_pMainWnd, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ Π² классС CWinThread. Когда ΠΎΠΊΠ½ΠΎ, прСдставлСнноС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ m_pMainWnd закрываСтся, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ (Π² случаС Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя нСсколько Π·Π°Π΄Π°Ρ‡, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π·Π°Π΄Π°Ρ‡Π°):

m_pMainWnd = pMainFrame;

ΠœΠ΅Ρ‚ΠΎΠ΄ LoadFrame Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния Π½Π° экранС. Для этого Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ShowWindow ΠΈ UpdateWindow:

// ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния

pMainFrame->ShowWindow(m_nCmdShow);

// ОбновляСм содСрТимоС ΠΎΠΊΠ½Π°

pMainFrame->UpdateWindow();

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InitInstance обрабатываСтся командная строка прилоТСния. Для этого создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ cmdInfo класса CCommandLineInfo ΠΈ для Π½Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ParseCommandLine ΠΈ ProcessShellCommand:

// ΠŸΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку прилоТСния Π² поискС

// стандартных ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ…

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo);


// РаспрСдСляСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС

// прилоТСния

if (!ProcessShellCommand(cmdInfo)) return FALSE;

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

Класс CMultiApp ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ сообщСний. Π’Π°Π±Π»ΠΈΡ†Ρƒ сообщСний класса CMultiApp располоТСна Π² Ρ„Π°ΠΉΠ»Π΅ Multi.cpp. Она содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ΠΎΡ‚ мСню прилоТСния:

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

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

BEGIN_MESSAGE_MAP(CMultiApp, CWinApp)

 //{{AFX_MSG_MAP(CMultiApp)

 ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

 //}}AFX_MSG_MAP

 ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)

 ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

 ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)

END_MESSAGE_MAP()

Волько для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ сообщСния, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ID_APP_ABOUT, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ OnAppAbout, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС CMultiApp. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСния ID_FILE_NEW, ID_FILE_OPEN ΠΈ ID_FILE_PRINT_SETUP ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ся для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса CWinApp, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом для CMultiApp.

ΠœΠ΅Ρ‚ΠΎΠ΄-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ OnAppAbout вызываСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· мСню Help строку About. OnAppAbout создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CAboutDlg, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ панСль About ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ для Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ DoModal, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ панСль Π½Π° экранС (рис. 1.9):

void CMultiApp::OnAppAbout() {

 CAboutDlg aboutDlg;

 aboutDlg.DoModal();

}

Рис. 1.9. Окно Project Workspace, класс CMainFrame


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

Π’Π½ΡƒΡ‚Ρ€ΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния ΠΈ состояния, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ MDI ΠΎΠΊΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для просмотра Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Для управлСния Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс CMainFrame, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ MainFrm.h.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ класс CMDIFrameWnd, просмотрСв Π΅Π³ΠΎ структуру Π² ΠΎΠΊΠ½Π΅ Project Workspace, Π½Π° страницС ClassView (рис. 1.10). Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ названию класса ΠΈΠ»ΠΈ ΠΏΠΎ названию ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ вас ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ загрузится Π² ΠΎΠΊΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Microsoft Visual C++.


Рис. 1.10. Окно Project Workspace, класс CMainFrame


НиТС ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса CMainFrame:

class CMainFrame : public CMDIFrameWnd {

 DECLARE_DYNAMIC(CMainFrame)

public:

 CMainFrame();


// Attributes

public:


// Operations

public:


// Overrides

 //{{AFX_VIRTUAL(CMainFrame)

 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

 //}}AFX_VIRTUAL


// Implementation

public:

 virtual ~CMainFrame();

#ifdef _DEBUG

 virtual void AssertValid() const;

 virtual void Dump(CDumpContext& dc) const;

#endif


protected:

 CStatusBar m_wndStatusBar;

 CToolBar   m_wndToolBar;


protected:

 //{{AFX_MSG(CMainFrame)

 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()

};

Класс Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния CMainFrame практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ соотвСтствуСт классу Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния. Π”Π°ΠΆΠ΅ названия этих классов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. Однако ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ класс CMainFrame наслСдуСтся ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CMDIFrameWnd, Π° Π½Π΅ ΠΎΡ‚ CFrameWnd, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ для ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΈ дСструктор класса CMainFrame

НиТС прСдставлСны конструктор ΠΈ дСструктор класса CMainFrame. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ содСрТат ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой простыС Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса:

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

CMainFrame::CMainFrame() {

 // TODO:

}

// ДСструктор класса CMainFrame

CMainFrame::~CMainFrame() {}

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

Π’Π°Π±Π»ΠΈΡ†Π° сообщСний класса CMainFrame содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ON_WM_CREATE, которая устанавливаСт для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСния WM_CREATE ΠΌΠ΅Ρ‚ΠΎΠ΄ OnCreate. БообщСния WM_CREATE ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π²ΠΎ врСмя создания Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния.