Définit, un bitmap statique iconique pour afficher un aperçu en temps réel (aussi connu comme un aperçu Peek) d'une fenêtre ou d'un onglet
#include <WinAPIGdi.au3>
_WinAPI_DwmSetIconicLivePreviewBitmap ( $hWnd, $hBitmap [, $bFrame = False [, $tClient = 0]] )
$hWnd | Handle de la fenêtre ou de l'onglet. |
$hBitmap | Handle du bitmap indépendant du périphérique (DIB) pour représenter la fenêtre spécifiée. |
$bFrame | [optionnel] Indique s'il faut afficher un cadre autour du bitmap fourni, les valeurs valides sont: True - Affiche un cadre. False - N'affiche pas de cadre (par défaut). |
$tClient | [optionnel] Structure $tagPOINT qui contient le décalage de la zone client de la fenêtre de l'onglet par rapport au cadre de la fenêtre de l'hôte. Ce décalage permet au contenu de la fenêtre de l'onglet d'être dessiné correctement dans un aperçu en direct quand il est dessiné sans son cadre. |
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_DwmSetIconicLivePreviewBitmap() en réponse à un message de WM_DWMSENDICONICLIVEPREVIEWBITMAP.
Le bitmap retourné doit pas être plus grand que la zone cliente de la fenêtre ou du cadre et doit avoir une profondeur de couleur de 32 bits.
Le DWM utilise une copie du bitmap, mais 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.
Le DWM ne conserve pas sa copie du bitmap lorsque le DWM cesse d'afficher la représentation en direct de la prévisualisation.
Cette fonction nécessite Windows 7 ou une version ultérieure.
Consultez DwmSetIconicLivePreviewBitmap 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