On fait-on pour afficher une Bitmap dans une fenêtre créée à partir de l'api win32 (createWindow, CreateWindowEx)?
On fait appel à la fonction LoadImage !
dans cet exemple, l'image est directement affichée dans une form standard.
Dans le cas où vous utiliseriez CreateWindow, placez donc ce code dans votre fonction Callback > message WM_PAINT (en n'oubliant pas d'utiliser le paramètre hWnd et non Me.hWnd de la form).
Source / Exemple :
dans un module :
--------------------
Option Explicit
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInstance As Long, ByVal lpszName As String, ByVal uType As Long, ByVal cxDesired As Long, ByVal cyDesired As Long, ByVal fuLoad As Long) As Long
Public Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const IMAGE_BITMAP = 0
Public Const LR_LOADFROMFILE = &H10
Public Const SRCCOPY = &HCC0020
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type BITMAP '14 bytes
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
dans une Form :
-------------------
Option Explicit
Private hBitmap As Long
Private Sub Form_Paint()
Dim bmp As BITMAP
Dim hdc, hDCmemory As Long
' 1. on récupère le handle du contexte de périphérique (Device Context)
' de l'objet dans lequels on souhaite afficher l'image
hdc = GetDC(Me.hwnd)
' 2. on charge l'image et on stocke son handle
hBitmap = LoadImage(ByVal 0&, App.Path & "\monImage.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
' 3. on crée un contexte de périphérique, celui-ci sera utilisé pour charger l'image en mémoire
hDCmemory = CreateCompatibleDC(0)
' 4. on charge l'image en mémoire
Call SelectObject(hDCmemory, hBitmap)
' 5. on récupère les données du bitmap que l'on stocke dans une structure de type BITMAP (voir module)
Call GetObject(hBitmap, Len(bmp), bmp)
' 6. on affiche l'image dans le DC souhaité à partir de celui chargé en mémoire
Call BitBlt(hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hDCmemory, 0, 0, SRCCOPY)
' 7. on libère le DC de notre object
Call ReleaseDC(Me.hwnd, hdc)
Me.Width = bmp.bmWidth * 15
Me.Height = bmp.bmHeight * 15
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
' Et surtout, on n'oublie pas de supprimer les objects créés
Call DeleteObject(hBitmap)
End Sub
Conclusion :
Dans cet exemple, 2 fichiers:
- un module > avec les déclarations de fonctions et de structures da l'api Win32
- une Form sans object
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.