# Function Reference

# _WinAPI_MaskBlt

Combines the color data for the source and destination bitmaps using the specified mask and raster operation

#include <WinAPIGdi.au3>
_WinAPI_MaskBlt ( $hDestDC, $iXDest, $iYDest, $iWidth, $iHeight, $hSrcDC, $iXSrc, $iYSrc, $hMask, $iXMask, $iYMask, $iRop )

## Parameters

$hDestDC | Handle to the destination device context.
$iXDest | The x-coordinate, in logical units, of the upper-left corner of the destination rectangle.
$iYDest | The y-coordinate, in logical units, of the upper-left corner of the destination rectangle.
$iWidth | The width, in logical units, of the destination rectangle and source bitmap.
$iHeight | The height, in logical units, of the destination rectangle and source bitmap.
$hSrcDC | Handle to the device context from which the bitmap is to be copied.
$iXSrc | The x-coordinate, in logical units, of the upper-left corner of the source bitmap.
$iYSrc | The y-coordinate, in logical units, of the upper-left corner of the source bitmap.
$hMask | Handle to the monochrome mask bitmap combined with the color bitmap in the source device context.
$iXMask | The horizontal pixel offset for the mask bitmap specified by the hbmMask parameter.
$iYMask | The vertical pixel offset for the mask bitmap specified by the hbmMask parameter.
$iRop | The raster-operation code (same as for _WinAPI_BitBlt()).

## Return Value

Success: | True
Failure: | False

## Remarks

A value of 1 in the mask specified by $hMask indicates that the foreground raster operation code specified by
$iRop should be applied at that location. A value of 0 in the mask indicates that the background raster operation
code specified by $iRop should be applied at that location.
If no mask bitmap is supplied, this function behaves exactly like _WinAPI_BitBlt(), using the foreground raster
operation code.

## Related

_WinAPI_BitBlt

## See Also

Search MaskBlt in MSDN Library.

## Example

    #include "Extras\HelpFileInternals.au3"

    #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>

    ; Extracts icon and get its AND bitmask bitmap
    Local $sIco = _Extras_PathFull('Arrow.ico')
    Local $hIcon = _WinAPI_ShellExtractIcon($sIco, 0, 64, 64)
    Local $aInfo = _WinAPI_GetIconInfo($hIcon)
    _WinAPI_DeleteObject($aInfo[5])
    _WinAPI_DestroyIcon($hIcon)

    ; Create inverted bitmask bitmap
    $aInfo[5] = _WinAPI_InvertANDBitmap($aInfo[4])

    ; Load pattern bitmap
    Local $sBmp = _Extras_PathFull('Pattern.bmp')
    Local $hPattern = _WinAPI_LoadImage(0, $sBmp, $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE)

    ; Create GUI
    Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 320, 64)
    GUICtrlCreateIcon($sIco, 0, 0, 0, 64, 64)
    GUICtrlCreatePic($sBmp, 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

    ; Create XOR bitmask bitmap
    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)

    ; Create icon

    $hIcon = _WinAPI_CreateIconIndirect($hXOR, $aInfo[4])
    _WinAPI_DeleteObject($hXOR)

    ; Set both bitmask bitmaps to controls
    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

    ; Set icon to control
    GUICtrlSendMsg($idIcon, $STM_SETIMAGE, 1, $hIcon)

    ; Show GUI
    GUISetState(@SW_SHOW)

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE