Компонент 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));
Читать дальше