Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


Интересен код использования функции BitBlt. Можно рисовать рядом с окном инсталлятора (или в любом другом месте экрана) изображения, например, для наглядной демонстрации, при выборе компонентов или выборе скинов , тем, шаблонов и т.д.
Код: Выделить весь код
outfile BitBlt_test.exe

!define LR_LOADFROMFILE     0x0010
!define IMAGE_BITMAP        0
!define LR_CREATEDIBSECTION    0x00002000
Var hBitmap
Var hDC
Var hDCMem
Var oldObject
; Функция  BitBlt выполняет передачу битовых блоков данных о цвете, соответствующих прямоугольнику пикселей из заданного исходного контекста устройства 
; в целевой контекст устройства.
; Растровая операция SRCCOPY 00CC0020  копирует исходный прямоугольник непосредственно в целевой прямоугольник
Section
StrCpy $0 $EXEDIR\vinni.bmp
  System::Call 'user32::LoadImage(i 0, t r0, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s'
Pop $hBitmap
  System::Call "user32::GetDC(i R1) i.s"  
Pop $hDC
  System::Call "gdi32::CreateCompatibleDC(i $hDC) i.s"   
Pop $hDCMem
  System::Call "gdi32::SelectObject(i $hDCMem, i $hBitmap) i.s"
Pop $oldObject
System::Call "gdi32::BitBlt(i $hDC, i 50, i 50, i 185, i 255, i $hDCMem, i 0, i 0, i 0x00CC0020) i.s" 
  
System::Call "gdi32::BitBlt(i $hDC, i 50, i 450, i 185, i 255, i $hDCMem, i 0, i 0, i 0x00CC0020) i.s" 
SectionEnd

Function .onGUIEnd
System::Call `gdi32::DeleteObject(i s)` $hBitmap
FunctionEnd
i 50, i 450, i 185, i 255 - координаты и размер BMP рисунка
Есть правда досадный момент - изображение почему то не разрушается при закрытии инсталлятора (хотя DeleteObject предусмотрен в .onGUIEnd )
И изображение можно разрушить любым помещённым на него объектом...
Может кто подскажет, как это устранить ?
Пример во вложении :

Последний раз редактировалось MKN, 27-05-2020 в 16:17.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:21, 26-06-2014 | #1223