Moin
Also ich wolle, das was ich mit GDI+ auf ne Gui gezeichnet hab gerne Scrollen nur leider denke ich wird es für mich unmöglich sein, da ich die kentnisse dazu noch nicht hab. Deshalb hab ich Probiert mit GUIcrtlcreateGraphic() ein ctrl zu erstellen, auf welches ich dan zeichne, da dieses ja automatisch mitgescrollt wird. Nur, wenn ich einen Buffer auf dieses Handle erstelle und dann zeichne dieht alles etwas komisch aus und Funtioniert wohl auch nciht so richtig aber seht selbst hier mal mein bsp.
Spoiler anzeigen
#Include <GDIPlus.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <StructureConstants.au3>
$Haupt_GUI_Width = 200
$Haupt_GUI_Height = 200
Opt("GUIOnEventMode",1)
$Win = GUICreate("GDI* Test",$Haupt_GUI_Width,$Haupt_GUI_Height)
$hWin = WinGetHandle($Win)
$Graphic = GUICtrlCreateGraphic(0,0,$Haupt_GUI_Width,$Haupt_GUI_Height)
$hGraphic = GUICtrlGetHandle($Graphic)
GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") ; Vertikales Scrollen
GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") ; Horizontales Scrollen
_GUIScrollBars_Init($Win)
[/autoit] [autoit][/autoit] [autoit]GUISetOnEvent(-3,"_exit")
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]#Region Create Graphic Obj
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGraphic)
#EndRegion
#Region Buffer
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($Haupt_GUI_Width, $Haupt_GUI_Height, $hGraphics)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
#EndRegion
_GDIPlus_GraphicsDrawString($hBuffer, "Ich bin ein String", 50, 50)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
Sleep(2000)
_GDIPlus_GraphicsDrawString($hGraphics, "Ich bin ein String", 80, 80)
Sleep(2000)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height) ;;=> Buffer Funktioniert dann ledier auch nicht mehr
GUIRegisterMsg(0x000F, "MY_PAINT");=>Redraw
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
Func MY_PAINT($hWnd, $msg, $wParam, $lParam)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
;_WinAPI_RedrawWindow($hWin, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME))
Return "GUI_RUNDEFMSG"
EndFunc ;==>MY_PAINT
; Horizontales Scrollen
Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
#forceref $Msg, $lParam
Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
Local $index = -1, $xChar, $xPos
Local $Min, $Max, $Page, $Pos, $TrackPos
For $x = 0 To UBound($aSB_WindowInfo) - 1
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$xChar = $aSB_WindowInfo[$index][2]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0
; Ermittelt alle Informationen der horizontalen Scrollbar
Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
$Min = DllStructGetData($tSCROLLINFO, "nMin")
$Max = DllStructGetData($tSCROLLINFO, "nMax")
$Page = DllStructGetData($tSCROLLINFO, "nPage")
$xPos = DllStructGetData($tSCROLLINFO, "nPos")
$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
; Speichert die x-Position für einen späteren Vergleich
$Pos = $xPos
#forceref $Min, $Max
; Auswertung der vom System gemeldeten Scroll-Nachricht
Switch $nScrollCode
Case $SB_LINELEFT ; Der Anwender klickte auf den linken Pfeil
DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
Case $SB_LINERIGHT ; Der Anwender klickte auf den rechten Pfeil
DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
Case $SB_PAGELEFT ; Der Anwender klickte links neben dem Scrollbalken
DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
Case $SB_PAGERIGHT ; Der Anwender klickte rechts neben dem Scrollbalken
DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
EndSwitch
;~ // Setzt die neue Position und ermittelt sie danach erneut.
;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.
DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
_GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
; // Falls sich die x-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
$Pos = DllStructGetData($tSCROLLINFO, "nPos")
If ($Pos <> $xPos) Then _GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_HSCROLL
; Vertikales Scrollen
Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
#forceref $Msg, $wParam, $lParam
Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
Local $index = -1, $yChar, $yPos
Local $Min, $Max, $Page, $Pos, $TrackPos
For $x = 0 To UBound($aSB_WindowInfo) - 1
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$yChar = $aSB_WindowInfo[$index][3]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0
; Ermittelt alle Informationen der vertikalen Scrollbar
Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
$Min = DllStructGetData($tSCROLLINFO, "nMin")
$Max = DllStructGetData($tSCROLLINFO, "nMax")
$Page = DllStructGetData($tSCROLLINFO, "nPage")
$yPos = DllStructGetData($tSCROLLINFO, "nPos")
$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
; Speichert die y-Position für einen späteren Vergleich
$Pos = $yPos
; Auswertung der vom System gemeldeten Scroll-Nachricht
Switch $nScrollCode
Case $SB_TOP ; Der Anwender klickte auf die "Pos1"-Taste
DllStructSetData($tSCROLLINFO, "nPos", $Min)
Case $SB_BOTTOM ; Der Anwender klickte auf die "Ende"-Taste
DllStructSetData($tSCROLLINFO, "nPos", $Max)
Case $SB_LINEUP ; Der Anwender klickte auf den oberen Pfeil
DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
Case $SB_LINEDOWN ; Der Anwender klickte auf den unteren Pfeil
DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
Case $SB_PAGEUP ; Der Anwender klickte oberhalb des Scrollbalkens
DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
Case $SB_PAGEDOWN ; Der Anwender klickte unterhalb des Scrollbalkens
DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
EndSwitch
;~ // Setzt die neue Position und ermittelt sie danach erneut.
;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.
DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
_GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
; // Falls sich die y-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
$Pos = DllStructGetData($tSCROLLINFO, "nPos")
If ($Pos <> $yPos) Then
_GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
$yPos = $Pos
EndIf
Return $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>WM_VSCROLL
[/autoit] [autoit][/autoit] [autoit]Func _exit()
Exit
EndFunc