UDF > WinAPIEx > GDI > Desktop Window Manager >


_WinAPI_DwmSetIconicThumbnail

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] )

Paramètres

$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).

Valeur de retour

Succès: Retourne 1.
Échec: Retourne 0 et définit @error <> 0, @extended contient le code d'erreur HRESULT.

Remarques

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.

Voir aussi

Consultez DwmSetIconicThumbnail dans la librairie MSDN.

Exemple

#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