#include <APIConstants.au3>
#include <GUIConstants.au3>
#include <GUIComboBox.au3>
#include <GDIPlus.au3>
#include <WinAPIEx.au3>
#include "Skin.au3"
_GDIPlus_Startup()
Global $hPng[3] = [_GDIPlus_BitmapCreateFromFile('1.png'), _GDIPlus_BitmapCreateFromFile('2.png'), _GDIPlus_BitmapCreateFromFile('3.png')]
Global $Form1, $Button1, $Combo1, $nMsg, $Skin = True
$Form1 = GUICreate('Form1', 300, 180, -1, -1, BitOR($WS_BORDER, $WS_POPUP))
GUICtrlCreatePic('bck.bmp.png', 0, 0, 300, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
$Combo1 = GUICtrlCreateCombo('English', 80, 55, 140, 25, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL))
GUICtrlSetData(-1, 'Русский')
GUICtrlSetFont(-1, 9.8, $FW_NORMAL, $GUI_FONTNORMAL, 'Arial')
$Button1 = _Skin_AddButtonEx(90, 90, 120, 42, $hPng[0], $hPng[1], $hPng[2], '', $hPng[2], 1)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
_Update()
GUISetState()
While 1
If $Skin Then
_Skin_Helper($Form1)
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Combo1
_Update()
Case $Button1
EndSwitch
WEnd
Func _Update()
Local $hBitmap[3], $hGraphic, $hFamily, $hFont, $hFormat, $hBrush, $tLayout, $aData, $Text
Switch _GUICtrlComboBox_GetCurSel($Combo1)
Case 0 ; English
$Text = 'Button'
Case 1 ; Русский
$Text = 'Кнопка'
Case Else
$Text = ''
EndSwitch
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hPng[0])
$hFamily = _GDIPlus_FontFamilyCreate('Segoe UI')
$hFont = _GDIPlus_FontCreate($hFamily, 14, 0, 2)
$tLayout = _GDIPlus_RectFCreate(5, 5, 110, 31)
$hFormat = _GDIPlus_StringFormatCreate()
$aData = _GDIPlus_GraphicsMeasureString($hGraphic, $Text, $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDispose($hGraphic)
DllStructSetData($aData[0], 1, 5 + (110 - DllStructGetData($aData[0], 3)) / 2)
DllStructSetData($aData[0], 2, 5 + (31 - DllStructGetData($aData[0], 4)) / 2)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
For $i = 0 To 2
$hBitmap[$i] = _GDIPlus_ImageClone($hPng[$i])
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap[$i])
_GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 5)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $Text, $hFont, $aData[0], $hFormat, $hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
Next
_Skin_SetButtonEx($Button1, $hBitmap[0], $hBitmap[1], $hBitmap[2], 0, $hBitmap[2], 1, 1)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_FontDispose($hFont)
_GDIPlus_BrushDispose($hBrush)
EndFunc ;==>_Update
Func _GDIPlus_ImageClone($hImage)
Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipCloneImage", "handle", $hImage, "handle*", 0)
If @error Then Return SetError(@error, @extended, 0)
If $aResult[0] Then Return SetError(10, $aResult[0], 0)
Return $aResult[2]
EndFunc ;==>_GDIPlus_ImageClone
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Local $Msg = BitShift($wParam, 16)
Switch $hWnd
Case $Form1
Switch BitAND($wParam, 0xFFFF)
Case $Combo1
Switch $Msg
Case $CBN_CLOSEUP
$Skin = 1
Case $CBN_DROPDOWN
$Skin = 0
Case Else
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $Form1
If $skData[0][3] > 0 Then
Return $GUI_RUNDEFMSG
EndIf
Local $Info = GUIGetCursorInfo($Form1)
If Not @error Then
Switch $Info[4]
Case $Button1
; Nothing
Case Else
Return $HTCAPTION
EndSwitch
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NCHITTEST