Funktionreferenz


_WinAPI_DwmSetIconicLivePreviewBitmap

Beschreibung anzeigen in

Setzt eine statische, symbolische Bitmap um sie während einer Livevorschau eines Fensters oder Tabs zu zeigen (auch bekannt als Peek Preview)

#include <WinAPIGdi.au3>
_WinAPI_DwmSetIconicLivePreviewBitmap ( $hWnd, $hBitmap [, $bFrame = False [, $tClient = 0]] )

Parameter

$hWnd Das Handle eines Fensters oder Tabs.
$hBitmap Das Handle eines geräteunabhängigen Bitmaps (DIB) um das gegebene Fenster zu repräsentieren.
$bFrame [optional] Gibt an, ob ein Rahmen um die bereitgestellte Bitmap angezeigt werden soll. Gültige Werte sind:
    True - Zeigt einen Rahmen an.
    False - Zeigt keinen Rahmen an (Standard).
$tClient [optional] Die $tagPOINT Struktur welche den Versatz einer Tabfensterclientregion des Hostfensterrahmens.
Dieser Versatz erlaubt den Inhalt des Tabfensters in einer Livevorschau korrekt gezeichnet zu werden wenn es ohne einen Rahmen gezeichnet wird.

Rückgabewert

Erfolg: 1.
Fehler: 0 und setzt das @error Flag auf ungleich null, das @extended Flag kann den HRESULT-Fehlercode enthalten.

Bemerkungen

Ein Fenster ruft üblicherweise die _WinAPI_DwmSetIconicLivePreviewBitmap() Funktion als Antwort zur WM_DWMSENDICONICLIVEPREVIEWBITMAP Nachricht auf.
Die zurückgegebene Bitmap darf nicht größer als der Clientbereich des Fensters oder Rahmens sein und muss eine 32-Bit Farbtiefe besitzen.

Der DWM benutzt eine Kopie des Bitmaps aber der Aufrufer behält den Besitz des originalen Bitmaps und ist zudem für die Freigebung der Ressourcen verantwortlich wenn diese nicht länger benötigt werden.
Der DWM behält nicht die Kopie des Bitmaps wenn der DWM die Livevorschaurepräsentation aufhört anzuzeigen.

Diese Funktion benötigt Windows 7 oder höher.

Siehe auch

Suche nach DwmSetIconicLivePreviewBitmap in der MSDN Bibliothek.

Beispiel

#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(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Error', 'Require Windows 7 or later with enabled Aero theme.')
    Exit
EndIf

; Load bitmap to create a thumbnail
Global $g_hAutoIt = _WinAPI_LoadImage(0, @ScriptDir & '\Extras\AutoIt.bmp', $IMAGE_BITMAP, 0, 0, BitOR($LR_LOADFROMFILE, $LR_CREATEDIBSECTION))

; Create GUI
Global $g_hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 400, 400)

; Set DWM window attributes to provide the iconic bitmap, and to always render the thumbnail and live preview using the iconic bitmap
_WinAPI_DwmSetWindowAttribute($g_hForm, $DWMWA_FORCE_ICONIC_REPRESENTATION, 1)
_WinAPI_DwmSetWindowAttribute($g_hForm, $DWMWA_HAS_ICONIC_BITMAP, 1)

; Register WM_DWMSENDICONICLIVEPREVIEWBITMAP window message to display live preview
GUIRegisterMsg($WM_DWMSENDICONICLIVEPREVIEWBITMAP, 'WM_DWMSENDICONICLIVEPREVIEWBITMAP')

; Register WM_DWMSENDICONICTHUMBNAIL window message to display thumbnail
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

    Switch $hWnd
        Case $g_hForm
            Local $hBitmap = _CreateThumbnail($g_hAutoIt, 400, 400)
            _WinAPI_DwmSetIconicLivePreviewBitmap($g_hForm, $hBitmap, 1)
            _WinAPI_DeleteObject($hBitmap)
            Return 0
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_DWMSENDICONICLIVEPREVIEWBITMAP

Func WM_DWMSENDICONICTHUMBNAIL($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam

    Switch $hWnd
        Case $g_hForm
            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
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_DWMSENDICONICTHUMBNAIL