Самый быстрый способ реализовать C ++ Win32 Splash Screen - PullRequest
8 голосов
/ 03 октября 2008

Какой простой способ реализовать программу на C ++ Win32 для ...
- отобразить несжатое растровое изображение 800x600x24
- в окне без границ (единственное, что видно - изображение)
- закрывается через десять секунд
- и не использует MFC

Ответы [ 6 ]

6 голосов
/ 06 октября 2008

Если вы ориентируетесь на современные версии Windows (Windows 2000) и выше, вы можете использовать функцию UpdateLayeredWindow для отображения любого растрового изображения (в том числе, если необходимо, с альфа-каналом).

Я написал в блоге серию из четырех частей о том, как написать приложение для C ++ Win32, которое делает это. Если вам нужно подождать ровно десять секунд, чтобы закрыть заставку (вместо того, пока основное окно не будет готово), вам нужно будет использовать предложенную Дэном Кристоловяну технику таймера, которая вызывает DestroyWindow.

2 голосов
/ 03 октября 2008

Ключевым моментом здесь является использование многослойного окна .

Вы можете начать с проекта, созданного мастером win32, и изменить вызов CreateWindow на CreateWindowEx и установить WS_EX_LAYERED в качестве расширенного стиля окна и сочетание WS_POPUP и WS_SYSMENU в качестве стиля окна. Когда вы сделаете это, запустите ваше приложение, оно будет невидимым. Затем вы должны использовать UpdateLayeredWindow , чтобы нарисовать ваше изображение. Вам также может понадобиться функция AlphaBlend , если вы хотите использовать изображение PNG с альфа-слоем.

Надеюсь, это поможет!

2 голосов
/ 03 октября 2008

Зарегистрируйте класс для всплывающего окна и создайте окно, используя следующие стили:

  • WS _ POPUPWINDOW: убедитесь, что в вашем окне нет заголовка / sysmenu
  • WS _ EX _ TOPMOST: заставит экран заставки быть на вершине всего. Обратите внимание, что это немного навязчиво. Возможно, лучше сделать заставку дочерней по отношению к вашему главному окну. Возможно, вам придется манипулировать z-порядком, чтобы другие всплывающие окна (если вы их создали) были ниже заставки.

Используйте CreateDIBSection для загрузки растрового изображения. Это должно быть легко, поскольку файлы BMP - это, по сути, дампы структур DIB. Или сделайте то, что сказал Кен, и используйте LoadImage.

Обработка сообщения WM _ PAINT или WM _ ERASEBKGND для рисования растрового изображения в окне.

На WM _ CREATE установить таймер на 10 секунд, а когда Windows отправляет сообщение WM _ TIMER, окно само уничтожается.

1 голос
/ 04 октября 2008

Вы можете:

  • Создайте диалог в файле ресурсов
  • Содержит элемент управления изображением
  • Установите тип управления изображением на Bitmap
  • Создайте / импортируйте ваше растровое изображение в файле ресурсов и установите этот идентификатор растрового изображения для элемента управления изображением в вашем диалоговом окне
  • Создать окно с помощью CreateDialogParam
  • Обработка WM_INITDIALOG для установки таймера на 10 секунд (используйте SetTimer)
  • Обрабатывать WM_TIMER, чтобы перехватить ваше событие таймера и уничтожить окно (используйте DestroyWindow)
1 голос
/ 04 октября 2008

FAQ по Win32 api

См. Профессиональный форум Win32api Новости: //194.177.96.26/comp.os.ms-windows.programmer.win32 где ответили сотни раз за 20 лет ..

1 голос
/ 03 октября 2008
  • Используйте LoadImage для загрузки растрового изображения
  • Используйте CreateWindowEx для создания окна.
  • В окне proc захватить WM_PAINT. Используйте BitBlt для рисования растрового изображения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...