;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
;    _WinAPI_CreateSolidBrush.au3
;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <Constants.au3>


#include <WinAPI.au3>

Opt ("MustDeclareVars", 1)



Global Enum $IDC_RED   = 100, _
            $IDC_GREEN, _
		  $IDC_BLUE

Global $aButton [3][2] = [ ["Rot", $IDC_RED], ["Grün", $IDC_GREEN], ["Blau", $IDC_BLUE] ]

Global $hInstance

Global $nColor = 0x0000FFFF ; Gelb (BGR)


;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
Exit (Example ( ))
;««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««


Func Example ( )

	Local $hwndMain
	Local $hwndButton
	Local $nWidth
	Local $x


	$hInstance = _WinAPI_GetModuleHandle (0)

	; Das Hauptfenster erzeugen
	$hwndMain = GUICreate ( _
				"_WinAPI_CreateWindowEx - Demo", _	; Titel des Fensters
				400, 300, -1, -1, _				; Grösse und Position des Fensters
				BitOR ($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), _	; Fensterstile
				$WS_EX_WINDOWEDGE, _		; Erweiterte Fensterstile
				0 _						; Handle des Parent-Fensters
				)

	$nWidth = _WinAPI_GetWindowWidth ($hwndMain)
	$x = ($nWidth / 7)

	For $i = 0 To 2

		; Drei einfache Schaltflächen erzeugen
		$hwndButton = _WinAPI_CreateWindowEx ( _
						0, _					; Erweiterte Fensterstile
						"BUTTON", _			; Name der Fensterklasse
						$aButton[$i][0], _				; Text/Titel des Fensters
						BitOR ($WS_TABSTOP, $WS_CHILD, _	; Fensterstile
							  $WS_VISIBLE, $BS_CENTER), _
						$x, 220, ($nWidth / 7), 25, _	; Position und Grösse des Fensters
						$hwndMain, _			; Handle des Parent-Fensters
						$aButton[$i][1], _		; Identifizierer des (Kind-)Fensters
						$hInstance, _			; Instanzhandle des Moduls
						0 _					; Anwendungsdefinierter Wert
						)
		$x += 2 * ($nWidth / 7)
	Next

	; Fensternachrichten registrieren
	GUIRegisterMsg ($WM_COMMAND, "MyWM_COMMAND")
	GUIRegisterMsg ($WM_ERASEBKGND, "MyWM_ERASEBKGND")

	; Das Hauptfenster anzeigen
	_WinAPI_ShowWindow ($hwndMain, @SW_SHOW)


	While (TRUE)

		Switch (GUIGetMsg ( ))
			Case $GUI_EVENT_CLOSE
				ExitLoop
		EndSwitch
	WEnd


EndFunc

Func MyWM_COMMAND ($hwnd, $message, $wParam, $lParam)

	Switch (_WinAPI_LoWord ($wParam))
		Case $IDC_RED
			; Farbwert (BGR) in globale Variable ablegen
			$nColor = 0x000000FF
			; Neuzeichnen des Fensters erzwingen
			_WinAPI_InvalidateRect ($hwnd, 0, True)
			_WinAPI_UpdateWindow ($hwnd)

		Case $IDC_GREEN
			; Farbwert (BGR) in globale Variable ablegen
			$nColor = 0x0000FF00
			; Neuzeichnen des Fensters erzwingen
			_WinAPI_InvalidateRect ($hwnd, 0, True)
			_WinAPI_UpdateWindow ($hwnd)

		Case $IDC_BLUE
			; Farbwert (BGR) in globale Variable ablegen
			$nColor = 0x00FF0000
			; Neuzeichnen des Fensters erzwingen
			_WinAPI_InvalidateRect ($hwnd, 0, True)
			_WinAPI_UpdateWindow ($hwnd)
	EndSwitch

	Return $GUI_RUNDEFMSG

EndFunc

Func MyWM_ERASEBKGND ($hwnd, $message, $wParam, $lParam)

	Local $hdc = $wParam
	Local $hBrush, $hBrushOld
	Local $rcClient


	; Anwendungsbereich ermitteln
	$rcClient = _WinAPI_GetClientRect ($hwnd)

	; Füllmuster erzeugen
	$hBrush = _WinAPI_CreateSolidBrush ($nColor)

	; Füllmuster in den Gerätekontext einsetzen
	$hBrushOld = _WinAPI_SelectObject ($hdc, $hBrush)

	; Anwendungsbereich mit dem Füllmuster zeichnen
	_WinAPI_FillRect ($hdc, DllStructGetPtr ($rcClient), $hBrush)

	; Das ursprügliche Füllmuster wieder in den Gerätekontext einsetzen
	_WinAPI_SelectObject ($hdc, $hBrushOld)

	; Unser selbsterzeugtes Füllmuster wieder
	; löschen, wenn wir es nicht mehr brauchen
	_WinAPI_DeleteObject ($hBrush)

	Return 1

EndFunc



;«««««««««««««««««««««««««««««««« End of File «««««««««««««««««««««««««««««««««
