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

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

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

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, всС возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Microsoft, Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ самому. Однако Π·Π°Ρ‡Π΅ΠΌ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ врСмя, ΠΊΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Microsoft

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

БСйчас ΠΌΡ‹ расскаТСм ΠΎΠ± использовании ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Microsoft Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Splash Screen. Π”Π°Π»Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ мСню, панСлях управлСния ΠΈ панСлях состояния ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ссылки Π½Π° Component Gallry.

Заставка для прилоТСния

МногиС прилоТСния Windows ΠΏΡ€ΠΈ запускС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π½Π° экранС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ заставку. Π’ Π½Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π° Ρ„ΠΎΠ½Π΅ рисунка прСдставлСны Π½Π°Π·Π²Π°Π½ΠΈΠ΅ прилоТСния, Π½ΠΎΠΌΠ΅Ρ€ вСрсии, другая справочная информация. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Microsoft Word, Microsoft Excel ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ офисныС прилоТСния Microsoft. Microsoft Visual C++ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ заставку Π²ΠΎ врСмя запуска.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Component Gallry ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Splash Screen Π²Ρ‹ Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ всСго Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ½ΡƒΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ заставку.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ прилоТСния ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ заставку. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Component Gallry ΠΈΠ· страницы Microsoft, ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Splash Screen. Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Insert.

На экранС появится диалоговая панСль Splash Screen (рис. 2.2). Π’ Π½Π΅ΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ряд характСристик. Π’ ΠΏΠΎΠ»Π΅ Class Name отобраТаСтся имя класса CSplashWnd, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ заставки. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это имя ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· измСнСния. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ - Bitmap resource ID отобраТаСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ изобраТСния bitmap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ заставкой для прилоТСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ bitmap с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDB_SPLASH.


Рис. 2.2. Диалоговая панСль Splash Screen


ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Splash Screen Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ изобраТСния bitmap с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDB_SPLASH. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ останСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π½Π° свой вкус. ΠœΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΡƒΠΆΠ΅ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ IDB_SPLASH Π½Π° рисункС 2.3.

Рис. 2.3. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ IDB_SPLASH


ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса CSplashWnd, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½ΠΎΠΌ заставки, ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Ρ‹ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Splash.cpp ΠΈ Splash.h. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ вмСстС с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ прилоТСния. Если Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ названия Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Change.

Когда Π²Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ панСль Splash Screen, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ OK. НачнСтся процСсс встраивания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ПослС Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ панСль Component Gallry, для Ρ‡Π΅Π³ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Close.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Однако, Π½Π° наш взгляд, послС встраивания ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° стоит, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Π΅Π³ΠΎ работоспособности.

Как устроСн ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Splash Screen

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠΊΠ½ΠΎ просмотра ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Project Workspace ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ Π² Π½Π΅ΠΌ измСнСния. На страницС ClassView появился Π½ΠΎΠ²Ρ‹ΠΉ класс CSplashWnd, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π³Π»Π°Π²Π½ΠΎΠΌ классС прилоТСния появился Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage.

На страницС ResourceView ΠΊ рСсурсам прилоТСния добавился рСсурс Bitmap с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDB_SPLASH. На страницС FileView Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ измСнСния. Π’ Π½Π΅ΠΉ добавился Ρ„Π°ΠΉΠ» Splash.cpp, Π° Π² ΠΏΠ°ΠΏΠΊΠ΅ зависимых Ρ„Π°ΠΉΠ»ΠΎΠ² Dependencies появились ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Splash.h ΠΈ Splash16.bmp.

Число 16 Π½Π° ΠΊΠΎΠ½Ρ†Π΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° Splash16.bmp ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ². К соТалСнию, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Splash Screen Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с изобраТСниями, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ большСС количСство Ρ†Π²Π΅Ρ‚ΠΎΠ².

ΠšΡ€ΠΎΠΌΠ΅ пСрСчислСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠΊΠ½Π° просмотра ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Project Workspace, ΠΈΠΌΠ΅ΡŽΡ‚ мСсто ΠΈ измСнСния Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния. Π’Π°ΠΊΠΈΠ΅ измСнСния ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅, особСнно Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ прилоТСния слишком Π²Π΅Π»ΠΈΠΊ ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Для облСгчСния поиска Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΠ½ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ коммСнтариями ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°:

// CG:

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ CG ΡΠ²Π»ΡΡŽΡ‚ΡΡ сокращСниСм ΠΎΡ‚ Component Gallry. ПослС символов CG: ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ слСдуСт словСсноС описаниС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Microsoft Visual C++ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ русскоязычныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ тСкст ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ собствСнноС описаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Splash Screen.

ΠœΠ΅Ρ‚ΠΎΠ΄ InitInstance класса CMultiApp

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, просмотритС ΠΌΠ΅Ρ‚ΠΎΠ΄ InitInstance класса CMultiApp. ΠœΡ‹ Π½Π΅ стали ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ здСсь ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InitInstance класса CMultiApp, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ½ ΡƒΠΆΠ΅ Π±Ρ‹Π» Π½Π°ΠΌΠΈ описан Ρ€Π°Π½Π΅Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ β€œΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Multi”, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, измСнСния Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ InitInstance Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ СдинствСнного Π±Π»ΠΎΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ CG.

Π’ этом Π±ΠΎΠ»Π΅ CG: сначала выполняСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки прилоТСния. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ParseCommandLine, ΡƒΠΆΠ΅ описанный Ρ€Π°Π½Π΅Π΅.

Он записываСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ строку прилоТСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ cmdInfo класса CCommandLineInfo. Для нас Π²Π°ΠΆΠ½ΠΎ, Ссли Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС прилоТСния Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, Π² элСмСнт m_bShowSplash ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° cmdInfo записываСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ TRUE, Π° Ссли ΡƒΠΊΠ°Π·Π°Π½ΠΎ β€” FALSE.

Π—Π°Ρ‚Π΅ΠΌ выполняСтся Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° EnableSplashScreen класса CSplashWnd. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΅ΠΌΡƒ пСрСдаСтся элСмСнт m_bShowSplash ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° cmdInfo. Он опрСдСляСт, Π½Π°Π΄ΠΎ Π»ΠΈ ΠΏΡ€ΠΈ запускС прилоТСния ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ заставку. Если m_bShowSplash содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ TRUE, заставка показываСтся, Ссли FALSE β€” Π½Π΅Ρ‚.

На этом Π±Π»ΠΎΠΊ CG:, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Splash Screen, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Π²Π°ΠΌ тСкст ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InitInstance. Π•Π³ΠΎ описаниС Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ β€œΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Multi”:

BOOL CMultiApp::InitInstance() {

 // CG: Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡ€ΠΈ вставкС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

 // ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Splash Screen

 {

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

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

  CCommandLineInfo cmdInfo;

  ParseCommandLine(cmdInfo);


  CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);

 }


#ifdef _AFXDLL

 Enable3dControls();

#else

 Enable3dControlsStatic();

#endif


 // Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

 LoadStdProfileSettings();


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

 CSingleDocTemplate* pDocTemplate;

 pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(CMultiDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CMultiView));


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

 AddDocTemplate(pDocTemplate);


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

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

 CCommandLineInfo cmdInfo;

 ParseCommandLine(cmdInfo);


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

 if (!ProcessShellCommand(cmdInfo)) return FALSE;


 return TRUE;

}

ΠœΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage класса CMultiApp

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage , ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Π³Π»Π°Π²Π½ΠΎΠΌ классС прилоТСния CMultiApp, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС CWinApp. ΠœΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage вызываСтся ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ распрСдСлСно ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ TranslateMessage ΠΈ DispatchMessage. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° pMsg, пСрСдаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру Ρ‚ΠΈΠΏΠ° MSG, которая прСдставляСт ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ сообщСниС, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:

virtual BOOL PreTranslateMessage(MSG* pMsg);

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сообщСний ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΡŠΡΡ‚ΡŒ ΠΈΡ… ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ).

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π΄Π°Π½Π½ΠΎΠ΅ сообщСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage сам выполняСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сообщСния ΠΈ ΠΎΠ½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ΠΎ врСмя вставки Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Splash Screen Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния добавляСтся Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° PreTranslateAppMessage класса CSplashWnd.

Если ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateAppMessage класса CSplashWnd Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ TRUE, Ρ‚ΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateAppMessage класса CMultiApp Ρ‚Π°ΠΊΠΆΠ΅ сразу Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ TRUE. БообщСния, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ классом CSplashWnd Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Если ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateAppMessage класса CSplashWnd Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FALSE, Ρ‚ΠΎΠ³Π΄Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ PreTranslateMessage Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CWinApp.