Combine les données de couleurs des bitmaps source et de destination à l'aide du masque spécifié et d'une opération raster
#include <WinAPIGdi.au3>
_WinAPI_MaskBlt ( $hDestDC, $iXDest, $iYDest, $iWidth, $iHeight, $hSrcDC, $iXSrc, $iYSrc, $hMask, $iXMask, $iYMask, $iRop )
$hDestDC | Handle du contexte de périphérique de destination. |
$iXDest | La coordonnée x, en unités logiques, du coin supérieur gauche du rectangle de destination. |
$iYDest | La coordonnée y, en unités logiques, du coin supérieur gauche du rectangle de destination. |
$iWidth | La largeur, en nombre d'unités logiques, du rectangle de destination et du bitmap source. |
$iHeight | La hauteur, dans les unités logiques, de rectangle de destination et du bitmap source. |
$hSrcDC | Handle du contexte de périphérique à partir duquel le bitmap doit être copié. |
$iXSrc | La coordonnées x, en unités logiques, du coin supérieur gauche du bitmap source. |
$iYSrc | La coordonnée y, en unités logiques, du coin supérieur gauche du bitmap source. |
$hMask | Handle du bitmap de masque monochrome associée au bitmap en couleur dans le contexte de périphérique de la source. |
$iXMask | Le décalage horizontal des pixels du bitmap du masque spécifié par le paramètre hbmMask. |
$iYMask | Le décalage vertical des pixels du bitmap du masque spécifié par le paramètre hbmMask. |
$iRop | Le code de l'opération de trame (le même que pour _WinAPI_BitBlt()). |
Succès: | Retourne True |
Échec: | Retourne False |
Une valeur de 1 dans le masque spécifiée par $hMask indique que l'opération de trame d'avant-plan spécifiée par le code $iRop doit être appliquée à cette position.
Une valeur de 0 dans le masque indique que l'opération de trame d'arrière-plan spécifié par le code $iRop doit être appliquée à cette position.
Si aucun bitmap masque est fourni, cette fonction se comporte exactement comme _WinAPI_BitBlt(), en utilisant le code de l'opération de trame d'arrière-plan.
Consultez MaskBlt dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> #include <WinAPIIcons.au3> #include <WinAPIRes.au3> #include <WinAPIShellEx.au3> #include <WindowsConstants.au3> ; Extrait une icône et obtient son bitmap de masque de bits AND Local $hIcon = _WinAPI_ShellExtractIcon(@ScriptDir & '\Extras\Arrow.ico', 0, 64, 64) Local $aInfo = _WinAPI_GetIconInfo($hIcon) _WinAPI_DeleteObject($aInfo[5]) _WinAPI_DestroyIcon($hIcon) ; Crée un bitmap de masque de bits inversé $aInfo[5] = _WinAPI_InvertANDBitmap($aInfo[4]) ; Charge le bitmap Pattern.bmp Local $hPattern = _WinAPI_LoadImage(0, @ScriptDir & '\Extras\Pattern.bmp', $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE) ; Crée une GUI Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 320, 64) GUICtrlCreateIcon(@ScriptDir & '\Extras\Arrow.ico', 0, 0, 0, 64, 64) GUICtrlCreatePic(@ScriptDir & '\Extras\Pattern.bmp', 192, 0, 64, 64) Local $idIcon = GUICtrlCreateIcon('', 0, 256, 0, 64, 64) Local $aidPic[2], $ahPic[2] $aidPic[0] = GUICtrlCreatePic('', 64, 0, 64, 64) $aidPic[1] = GUICtrlCreatePic('', 128, 0, 64, 64) For $i = 0 To 1 $ahPic[$i] = GUICtrlGetHandle($aidPic[$i]) Next ; Crée un bitmap de masque de bits XOR Local $hDC = _WinAPI_GetDC($ahPic) Local $hSrcDC = _WinAPI_CreateCompatibleDC($hDC) Local $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hPattern) Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC) Local $hXOR = _WinAPI_CreateCompatibleBitmap($hDC, 64, 64) Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hXOR) _WinAPI_MaskBlt($hDestDC, 0, 0, 64, 64, $hSrcDC, 0, 0, $aInfo[5], 0, 0, $SRCCOPY) _WinAPI_ReleaseDC($ahPic, $hDC) _WinAPI_SelectObject($hDestDC, $hDestSv) _WinAPI_DeleteDC($hDestDC) _WinAPI_SelectObject($hSrcDC, $hSrcSv) _WinAPI_DeleteObject($hPattern) _WinAPI_DeleteDC($hSrcDC) ; Crée une icône $hIcon = _WinAPI_CreateIconIndirect($hXOR, $aInfo[4]) _WinAPI_DeleteObject($hXOR) ; Définit les deux bitmaps de masque de bits dans les contrôles Local $hObj For $i = 0 To 1 _SendMessage($ahPic[$i], $STM_SETIMAGE, 0, $aInfo[$i + 4]) $hObj = _SendMessage($ahPic[$i], $STM_GETIMAGE) If $hObj <> $aInfo[$i + 4] Then _WinAPI_DeleteObject($aInfo[$i + 4]) EndIf Next ; Définit l'icône dans le contrôle GUICtrlSendMsg($idIcon, $STM_SETIMAGE, 1, $hIcon) ; Affiche la GUI GUISetState(@SW_SHOW) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE