Définit un bitmap statique iconique sur une fenêtre ou un onglet pour être utiliser comme une représentation miniature
#include <WinAPIGdi.au3>
_WinAPI_DwmSetIconicThumbnail ( $hWnd, $hBitmap [, $bFrame = False] )
| $hWnd | Handle de la fenêtre ou de l'onglet. |
| $hBitmap | Handle du bitmap indépendant du périphérique (DIB) qui représente la fenêtre spécifiée. |
| $bFrame | [optionnel] Indique s'il faut afficher un cadre autour de la miniature fournie, les valeurs valides sont: True - Afficher un cadre. False - Ne pas afficher de cadre (par défaut). |
| Succès: | Retourne 1. |
| Échec: | Retourne 0 et définit @error <> 0, @extended contient le code d'erreur HRESULT. |
Une fenêtre appelle généralement la fonction _WinAPI_DwmSetIconicThumbnail() après avoir reçu un message de WM_DWMSENDICONICTHUMBNAIL.
La miniature ne doit pas dépasser le maximum de la coordonnée x et de la coordonnée y qui sont spécifiés dans le message WM_DWMSENDICONICTHUMBNAIL.
La miniature doit également avoir une profondeur de couleur de 32 bits.
Le DWM utilise une copie du bitmap, mais l'application peut libérer cette copie à tout moment en raison de contraintes de mémoire.
Si cela se produit, la fenêtre n'est pas avertie, mais elle pourrait recevoir une autre requête WM_DWMSENDICONICTHUMBNAIL lorsque sa miniature est à nouveau nécessaire.
L'appelant conserve la propriété du bitmap d'origine et est responsable de la libération des ressources qu'il utilise quand elles ne sont plus nécessaires.
Cette fonction nécessite Windows 7 ou une version ultérieure.
Consultez DwmSetIconicThumbnail dans la librairie MSDN.
#include <APIGdiConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WinAPIConv.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> #include <WinAPIRes.au3> #include <WinAPISys.au3> #include <WindowsConstants.au3> If (Number(_WinAPI_GetVersion()) < 6.1) Or (Not _WinAPI_DwmIsCompositionEnabled()) Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Nécessite Windows 7 ou une version ultérieure avec le thème Aero installé.') Exit EndIf ; Charge un bitmap pour créer une miniature Global $g_hAutoIt = _WinAPI_LoadImage(0, @ScriptDir & '\Extras\AutoIt.bmp', $IMAGE_BITMAP, 0, 0, BitOR($LR_LOADFROMFILE, $LR_CREATEDIBSECTION)) ; Crée une GUI Global $g_hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 400, 400) ; Définit les attributs de la fenêtre DWM pour fournir le bitmap d'icône, et pour faire toujours le rendu de la miniature et l'aperçu en direct du bitmap d'icône _WinAPI_DwmSetWindowAttribute($g_hForm, $DWMWA_FORCE_ICONIC_REPRESENTATION, 1) _WinAPI_DwmSetWindowAttribute($g_hForm, $DWMWA_HAS_ICONIC_BITMAP, 1) ; Inscrit le message de fenêtre WM_DWMSENDICONICLIVEPREVIEWBITMAP pour afficher un aperçu en direct GUIRegisterMsg($WM_DWMSENDICONICLIVEPREVIEWBITMAP, 'WM_DWMSENDICONICLIVEPREVIEWBITMAP') ; Inscrit le message de fenêtre WM_DWMSENDICONICTHUMBNAIL pour afficher la vignette GUIRegisterMsg($WM_DWMSENDICONICTHUMBNAIL, 'WM_DWMSENDICONICTHUMBNAIL') GUISetState(@SW_SHOW) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func _CreateThumbnail($hSource, $iWidth, $iHeight) Local $hBitmap = _WinAPI_CreateDIB($iWidth, $iHeight) Local $hDestDC = _WinAPI_CreateCompatibleDC(0) Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap) Local $tSIZE = _WinAPI_GetBitmapDimension($hSource) Local $hSrcDC = _WinAPI_CreateCompatibleDC(0) Local $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hSource) _WinAPI_SetStretchBltMode($hDestDC, $HALFTONE) _WinAPI_StretchBlt($hDestDC, 0, 0, $iWidth, $iHeight, $hSrcDC, 0, 0, DllStructGetData($tSIZE, 'X'), DllStructGetData($tSIZE, 'Y'), $SRCCOPY) _WinAPI_SelectObject($hDestDC, $hDestSv) _WinAPI_DeleteDC($hDestDC) _WinAPI_SelectObject($hSrcDC, $hSrcSv) _WinAPI_DeleteDC($hSrcDC) Return $hBitmap EndFunc ;==>_CreateThumbnail Func WM_DWMSENDICONICLIVEPREVIEWBITMAP($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam, $lParam If $hWnd = $g_hForm Then Local $hBitmap = _CreateThumbnail($g_hAutoIt, 400, 400) _WinAPI_DwmSetIconicLivePreviewBitmap($g_hForm, $hBitmap, 1) _WinAPI_DeleteObject($hBitmap) Return 0 EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_DWMSENDICONICLIVEPREVIEWBITMAP Func WM_DWMSENDICONICTHUMBNAIL($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam If $hWnd = $g_hForm Then Local $W, $H, $hBitmap $W = _WinAPI_HiWord($lParam) $H = _WinAPI_LoWord($lParam) If $W > $H Then $W = $H Else $H = $W EndIf $hBitmap = _CreateThumbnail($g_hAutoIt, $W, $H) _WinAPI_DwmSetIconicThumbnail($g_hForm, $hBitmap, 1) _WinAPI_DeleteObject($hBitmap) Return 0 EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_DWMSENDICONICTHUMBNAIL