Чтение онлайн

на главную - закладки

Жанры

Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Фролов Григорий Вячеславович

Шрифт:

 ON_WM_CREATE

 ON_WM_PAINT

 ON_WM_TIMER

 //}}AFX_MSG_MAP

END_MESSAGE_MAP

void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/) {

 c_bShowSplashWnd = bEnable;

}

void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/) {

 if (!c_bShowSplashWnd || c_pSplashWnd != NULL) return;

 // Allocate a new splash screen, and create the window.

 c_pSplashWnd = new CSplashWnd;

 if (!c_pSplashWnd->Create(pParentWnd)) delete c_pSplashWnd;

 else c_pSplashWnd->UpdateWindow;

}

BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg){

 if (c_pSplashWnd == NULL) return FALSE;

 // If we get a keyboard or mouse message, hide the splash

 // screen.

 if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN || pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_RBUTTONDOWN || pMsg->message == WM_MBUTTONDOWN || pMsg->message == WM_NCLBUTTONDOWN || pMsg->message == WM_NCRBUTTONDOWN || pMsg->message == WM_NCMBUTTONDOWN) {

c_pSplashWnd->HideSplashScreen;

return TRUE; // message handled here

 }

 return FALSE; // message not handled

}

BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/) {

 if (!m_bitmap.LoadBitmap(IDB_SPLASH)) return FALSE;

 BITMAP bm;

 m_bitmap.GetBitmap(&bm);

 return CreateEx(0, AfxRegisterWndClass(0, AfxGetApp->LoadStandardCursor(IDC_ARROW)), NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd, NULL);

}

void CSplashWnd::HideSplashScreen{

 // Destroy the window, and update the mainframe.

 DestroyWindow;

 AfxGetMainWnd->UpdateWindow;

}

void CSplashWnd::PostNcDestroy{

 // Free the C++ class.

 delete this;

}

int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {

 if (CWnd::OnCreate(lpCreateStruct) == -1) return -1;

 // Center the window.

 CenterWindow;

 // Set a timer to destroy the splash screen.

 SetTimer(1, 750, NULL);

 return 0;

}

void CSplashWnd::OnPaint{

 CPaintDC dc(this);

 CDC dcImage;

 if (!dcImage.CreateCompatibleDC(&dc)) return;

 BITMAP bm;

 m_bitmap.GetBitmap(&bm);

 // Paint the image.

 CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);

 dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);

 dcImage.SelectObject(pOldBitmap);

}

void CSplashWnd::OnTimer(UINT nIDEvent) {

 // Destroy the splash screen window.

 HideSplashScreen;

}

Вы

всегда можете получить файл Splash.cpp следуя инструкциям в начале раздела “Заставка для приложения”. Теперь опишем отдельные методы класса.

Конструктор и деструктор класса CSplashWnd

Конструктор класса CSplashWnd не содержит программного кода. Вы можете использовать его как заготовку, если решите расширить возможности компонента Splash Screen.

Деструктор класса CSplashWnd также не содержит ничего сложного, он используется исключительно для записи в указатель c_pSplashWnd значения NULL:

c_pSplashWnd = NULL;

Таблица сообщений класса CSplashWnd

Таблица сообщений класса CSplashWnd содержит всего три макрокоманды, которые расположены внутри блока //{{AFX_MSG_MAP и поэтому управляются через ClassWizard:

BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)

 //{{AFX_MSG_MAP(CSplashWnd)

 ON_WM_CREATE

 ON_WM_PAINT

 ON_WM_TIMER

 //}}AFX_MSG_MAP

END_MESSAGE_MAP

Две макрокоманды таблицы сообщений класса CSplashWnd уже давно вам знакомы. Это макрокоманда ON_WM_CREATE, которая вызывает метод OnCreate во время создания окна заставки (обработка сообщения WM_CREATE), и макрокоманда ON_WM_PAINT, которая вызывает метод OnPaint, когда надо перерисовать окно (обработка сообщения WM_PAINT).

Поделиться:
Популярные книги

Жребий некроманта 2

Решетов Евгений Валерьевич
2. Жребий некроманта
Фантастика:
боевая фантастика
6.87
рейтинг книги
Жребий некроманта 2

Предатель. Вернуть любимую

Дали Мила
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Предатель. Вернуть любимую

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж

Мама для дракончика или Жена к вылуплению

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мама для дракончика или Жена к вылуплению

Жандарм 5

Семин Никита
5. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 5

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Лорд Системы 14

Токсик Саша
14. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 14

Смерть может танцевать 4

Вальтер Макс
4. Безликий
Фантастика:
боевая фантастика
5.85
рейтинг книги
Смерть может танцевать 4

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Не отпускаю

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
8.44
рейтинг книги
Не отпускаю

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3