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

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

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

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

MFC обСспСчиваСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ стандартных ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний, начиная ΠΎΡ‚ простого рСзСрвирования ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ кончая ΠΏΠΎΠ»Π½ΠΎΠΉ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± использовании стандартных ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Microsoft Visual C++. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² стандартных ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний нСпосрСдствСнно Π² исходных тСкстах Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MFC.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сообщСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ прилоТСния. Π’ этом случаС Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ OnCmdMsg. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² классС CCmdTarget ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² классах CView ΠΈ CDocument .

НиТС описаны ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… сообщСний ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ прилоТСния. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ интСрфСйс, Ρ‚ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния прСдставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CMDIFrameWnd ΠΈΠ»ΠΈ класса, наслСдованного ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CMDIFrameWnd.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² сообщСниС, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния сначала прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ MDI. Окна MDI ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CMDIChildWnd ΠΈΠ»ΠΈ класса наслСдованного ΠΎΡ‚ Π½Π΅Π³ΠΎ.

Волько Ссли ΠΎΠΊΠ½ΠΎ MDI Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС, Π±ΡƒΠ΄Π΅Ρ‚ просмотрСна Ρ‚Π°Π±Π»ΠΈΡ†Π° сообщСний класса Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ сразу Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠΊΠ½ΠΎ MDI ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сообщСния Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ (см. Π½ΠΈΠΆΠ΅).

Если Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС, ΠΎΠ½ΠΎ пСрСдаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния. Напомним, Ρ‡Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния наслСдуСтся ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CWinApp ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого класса.

Окна MDI ΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния

Для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ интСрфСйс, Ρ€ΠΎΠ»ΡŒ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния выполняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CFrameWnd ΠΈΠ»ΠΈ класса наслСдованного ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CFrameWnd.

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ MDI ΠΎΠΊΠ½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ сообщСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса CFrameWnd ΠΈΠ»ΠΈ CMDIChildWnd, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ поступило ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ просмотра. Если ΠΎΠΊΠ½ΠΎ просмотра Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС, провСряСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° сообщСний класса CFrameWnd ΠΈΠ»ΠΈ CMDIChildWnd .

Если Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния ΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎ MDI ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ прилоТСния Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС, ΠΎΠ½ΠΎ пСрСдаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния.

Окно просмотра

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΎΠΊΠ½Π° Ρ‚ΠΈΠΏΠ° frame (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов CMDIFrameWnd, CFrameWnd ΠΈ CMDIChildWnd) ΠΎΠΊΠ½ΠΎ просмотра Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ провСряСт ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ сообщСний. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ, ΠΎΠ½ΠΎ пСрСдаСтся Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ, связанному с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ просмотра.

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΎΠΊΠ½ΠΎ просмотра, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, сначала провСряСт свою Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ сообщСний. Волько Π² Ρ‚ΠΎΠΌ, случаС Ссли Π² классС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° отсутствуСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ сообщСния, ΠΎΠ½ΠΎ пСрСдаСтся для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Диалоговая панСль

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ классов, наслСдованных ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π‘Dialog. Если ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС, ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠ΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ, ΠΎΠ½ΠΎ пСрСдаСтся Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ.

Если Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ΅ сообщСниС, ΠΎΠ½ΠΎ пСрСдаСтся Π³Π»Π°Π²Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ прилоТСния.

ΠœΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ графичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Multi Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π»ΠΎ возмоТностями прилоТСния Single, описанного Π² Ρ‚ΠΎΠΌΠ΅ 24 сСрии β€œΠ‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° систСмного программиста”. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Single прСдставляСт собой ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ графичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ изобраТСния, содСрТащиС малСнькиС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ эти рисунки Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π½Π° дискС.

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса CMultiDoc Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт pointFigCenter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ графичСский Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Как ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Single, этот элСмСнт сдСлан Π½Π° основС шаблона CArray. Однако вмСсто Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ класса CFigure, здСсь ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ стандартный класс CPoint , входящий Π² состав MFC. Π’ΠΈΠΏ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Multi Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

class CMultiDoc : public CDocument {


// Attributes

public:

 CArray<CPoint, CPoint&> pointFigCenter;

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ классов CArray , CMap ΠΈ CList ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ afxtempl.h. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ класс CArray, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ» afxtempl.h Π² ΠΊΠΎΠ½Ρ†Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° stdafx.h:

#include <afxtempl.h>

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сообщСния ΠΎΡ‚ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ. Для этого Π»ΡƒΡ‡ΡˆΠ΅ всСго Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ срСдствами MFC ClassWizard :

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

// CMultiView message handlers

void CMultiView::OnLButtonDown(UINT nFlags, CPoint point) {

 // TODO:

 // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CSingleDoc)

 CMultiDoc* pDoc = GetDocument();


 // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ pDoc

 ASSERT_VALID(pDoc);


 // ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π½Π° экранС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚

CClientDC dc(this);

 dc.Rectangle(point.x-10, point.y-10, point.x+10, point.y+10);


 // ДобавляСм ΠΊ массиву, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΌΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π½ΠΎΠ²Ρ‹ΠΉ

 // элСмСнт

 pDoc->pointFigCenter.Add(point);


 // УстанавливаСм Ρ„Π»Π°Π³ измСнСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

 pDoc->SetModifiedFlag();


 // Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnLButtonDown Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CView

 CView::OnLButtonDown(nFlags, point);

}

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ этого сообщСния рисуСт ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚. Для отобраТСния ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Rectangle. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ располоТСниС Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π°. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

Π—Π°Ρ‚Π΅ΠΌ добавляСм ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС графичСский Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ прилоТСния прСдставляСтся массивом pointFigCenter, содСрТащим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CPoint .

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnLButtonDown измСняСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, устанавливаСм Ρ„Π»Π°Π³ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, для Ρ‡Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ SetModifiedFlag. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnLButtonDown Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CView. На этом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСния Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠΊΠ½ΠΎ просмотра поступаСт сообщСниС WM_PAINT. Для этого слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnDraw ΠΎΠΊΠ½Π° просмотра Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. MFC AppWizard опрСдСляСт шаблон этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π²Π°ΠΌ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ β€œΠ½Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒβ€ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ шаблон.

ΠœΠ΅Ρ‚ΠΎΠ΄ OnDraw Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ записан Π² массивС pointFigCenter класса Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, сначала Π½Π°Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° экранС всС Π΅Π³ΠΎ элСмСнты:

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

// CMultiView drawing

void CMultiView::OnDraw(CDC* pDC) {

 CMultiDoc* pDoc = GetDocument();

 ASSERT_VALID(pDoc);


 int i;

 for (i=0; i<pDoc->pointFigCenter.GetSize(); i++)

  pDC->Rectangle(pDoc->pointFigCenter[i].x-10, pDoc->pointFigCenter[i].y-10, pDoc->pointFigCenter[i].x+10, pDoc->pointFigCenter[i].y+10);

}

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ DeleteContents класса CMultiDoc Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ удалял содСрТимоС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Для этого достаточно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС элСмСнты массива pointFigCenter, воспользовавшись ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ RemoveAll класса CArray. ПослС очистки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ DeleteContents Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CDocument .

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² класс CMultiDoc ΠΌΠ΅Ρ‚ΠΎΠ΄ DeleteContents ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ MFC ClassWizard, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² соотвСтствии со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠ΄Π°:

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

// CMultiDoc commands

void CMultiDoc::DeleteContents() {

 // ΠžΡ‡ΠΈΡ‰Π°Π΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, удаляя всС элСмСнты массива arrayFig.

 pointFigCenter.RemoveAll( );


 // Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ DeleteContents Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CDocument

 CDocument::DeleteContents();

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ создан ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° экранС, остаСтся Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ ΠΌΠΎΠ³Π»ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π° дискС ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ². Для этого ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Serialize класса Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π¨Π°Π±Π»ΠΎΠ½ для этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: