UDF > WinAPIEx > GDI > Desktop Window Manager >


_WinAPI_DwmSetIconicLivePreviewBitmap

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

Paramètres

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

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_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.

Voir aussi

Consultez DwmSetIconicLivePreviewBitmap 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