Что нового

Создать свой Pic контрол

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Сколько не пытался, ни как не получается создать контрол Pic и установить на него картинку.

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <WinAPIEx.au3>
#Include <GDIPlus.au3>

Global $ArrayCID

$hForm = GUICreate("", 550, 300)
InitializeSkin()
GUICtrlCreateButton("Hello", 20, 20, 80, 20)
GUICtrlCreateButton("Hello", 20, 50, 80, 20)
GUICtrlCreateButton("Hello", 20, 80, 80, 20)
GUIctrlCreateInput("", 20, 110, 80, 20)
GUIctrlCreateInput("", 20, 140, 80, 20)
GUIctrlCreateInput("", 20, 170, 80, 20)
GUIctrlCreateInput("", 20, 200, 80, 20)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func InitializeSkin()
	GUIRegisterMsg(0x000F, "WM_PAINT")
EndFunc	

Func WM_PAINT($hWnd, $iMsg, $wParam, $lParam)
	If WinExists($hWnd) Then
		Local $iCHWnd = _WinAPI_EnumChildWindows($hWnd, 0)
		For $i = 1 To UBound($iCHWnd) -1
		    Global $ArrayCID[$i][7]
		Next	
		For $i = 1 To UBound($iCHWnd) -1
			Local $iID = _WinAPI_GetDlgCtrlID($iCHWnd[$i][0])
			Local $iCoord = ControlGetPos($hWnd, "", $iID)
			$ArrayCID[$i - 1][0] = $iID
			$ArrayCID[$i - 1][1] = GUICtrlGetHandle($iID)
			$ArrayCID[$i - 1][2] = GUICtrlRead($iID)
			$ArrayCID[$i - 1][3] = $iCoord[0] 
			$ArrayCID[$i - 1][4] = $iCoord[1]
			$ArrayCID[$i - 1][5] = $iCoord[2]
			$ArrayCID[$i - 1][6] = $iCoord[3]
		Next
	EndIf
	__ISKIN_Button($hWnd, $ArrayCID)
	Return 'GUI_RUNDEFMSG'
EndFunc		

Func __ISKIN_Button($hWnd, $Array)
	Local $__ISKIN_Button
	For $i = 0 To UBound($Array) -1
		If _WinAPI_GetClassName($Array[$i][0]) = "Button" Then
			GUICtrlDelete($Array[$i][0])
	        $__ISKIN_Button = _WinAPI_CreateWindowEx(0, "Static", "", BitOR($WS_CHILD, $WS_VISIBLE, 0xE, $WS_DISABLED), $Array[$i][3], $Array[$i][4], $Array[$i][5], $Array[$i][6], $hWnd, $Array[$i][0], 0, 0)
			UsePNGImage($__ISKIN_Button, @ScriptDir & "\OFF.png")
	    EndIf
	Next
EndFunc

Func UsePNGImage($iPic, $sPNGFile)
    _GDIPlus_Startup()
    Local $hImage = _GDIPlus_ImageLoadFromFile($sPNGFile)
    Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _WinAPI_PostMessage($iPic, 0x172, 0, $hBitmap)
    _WinAPI_DeleteObject($hBitmap)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
EndFunc
 
Верх