Интересен код использования
функции 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 )
И изображение можно разрушить любым помещённым на него объектом...
Может кто подскажет, как это устранить ?
Пример во вложении :