By
DatMCEyeBall
I'm trying to make a "sheet of glass" with shadow text drawn on it, the problem is that the shadow isn't transparent at all.
I have absolutely no idea what I am doing wrong - being a noob with the WinAPI stuff.
Screen-shot:
Here's the script:
; Requires AutoIT beta 3.3.9.21 or newer
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=Beta
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>
#include <WinAPIGdi.au3>
If Not _WinAPI_DwmIsCompositionEnabled() Then
MsgBox(BitOR(16, 4096), 'Error', 'Script requires Windows Vista or later with enabled Aero theme.')
Exit
EndIf
Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173
Global $hDarkBK = GUICreate("Dark background", 400, 40, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
GUISetBkColor(0)
GUISetState(@SW_SHOW)
Global $hGUI = GUICreate("DWM Test", 300, 20, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST))
GUISetBkColor(0)
_WinAPI_DwmExtendFrameIntoClientArea($hGUI)
Global $Pic = GUICtrlCreatePic('', 0, 0, 300, 20)
Global $hPic = GUICtrlGetHandle($Pic)
Global $tRECT = _WinAPI_GetClientRect($hPic)
Global $Width = DllStructGetData($tRECT, 3) - DllStructGetData($tRECT, 1)
Global $Height = DllStructGetData($tRECT, 4) - DllStructGetData($tRECT, 2)
Global $hDC = _WinAPI_GetDC($hPic)
Global $hDestDC = _WinAPI_CreateCompatibleDC($hDC)
Global $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $Width, $Height)
Global $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
Global $hSrcDC = _WinAPI_CreateCompatibleDC($hDC)
Global $hSource = _WinAPI_CreateCompatibleBitmapEx($hDC, $Width, $Height, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))
Global $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hSource)
Global $hFont = _WinAPI_CreateFont(20, 0, 0, 0, $FW_NORMAL, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Arial')
_WinAPI_SelectObject($hSrcDC, $hFont)
_WinAPI_DrawShadowText($hSrcDC, "Why is the shadow not transparent?", 0xFFFFFF, 0x000000, 3, 3, $tRECT)
_WinAPI_BitBlt($hDestDC, 0, 0, $Width, $Height, $hSrcDC, 0, 0, $MERGECOPY)
_WinAPI_ReleaseDC($hPic, $hDC)
_WinAPI_SelectObject($hDestDC, $hDestSv)
_WinAPI_DeleteDC($hDestDC)
_WinAPI_SelectObject($hSrcDC, $hSrcSv)
_WinAPI_DeleteDC($hSrcDC)
_WinAPI_DeleteObject($hSource)
_WinAPI_DeleteObject($hFont)
; Set bitmap to control
_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
Global $hObj = _SendMessage($hPic, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
_WinAPI_DeleteObject($hBitmap)
EndIf
GUISetState(@SW_SHOW)
Global $nMsg
While 1
$nMsg = GUIGetMsg()
If $nMsg = $GUI_EVENT_CLOSE Then Exit
WEnd