greymouse Posted March 14, 2011 Share Posted March 14, 2011 So i have a problem to load GDI graphic before the label has been shown. How do i fix so it works? Here is the code + extra files. expandcollapse popup#include <GuiConstantsEx.au3> #include <GDIPlus.au3> #include <misc.au3> #include <file.au3> Opt('MustDeclareVars', 1) Global $hGUI, $hWnd, $hGraphic, $hPen,$s,$lines,$s1,$x,$color,$ss Global $s2,$file,$label,$msg,$button1 $file = "test.txt" $hGUI = GUICreate("Test", 300, 200) guisetbkcolor("0x181717") $label = guictrlcreatelabel("",5,100,84,62) guictrlsetbkcolor(-1,"0x000000") guictrlsetstate(-1,$GUI_HIDE) $button1 = guictrlcreatebutton("Minimap",5,170,50,21) $hwnd = guictrlgethandle($label) GUISetState() _GDIPlus_Startup () while 1 $msg = GUIGetMsg() switch $msg case $GUI_EVENT_CLOSE _GDIPlus_Shutdown () Exit case $button1 $s= WinGetState(GUICtrlGetHandle($label)) if bitand($s,2) then GUICtrlSetState($label, $GUI_hide) _GDIPlus_PenDispose ($hPen) _GDIPlus_GraphicsDispose ($hGraphic) Else update() ; <- add this after gui_show works. But before, It doesn't. GUICtrlSetState($label, $GUI_show) EndIf EndSwitch WEnd func update() $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hwnd) _GDIPlus_GraphicsClear($hgraphic,0x000000) $hpen = _GDIPlus_PenCreate(0xFF696969) _GDIPlus_GraphicsDrawRect ($hGraphic, 0, 0, 83,61,$hPen) $hpen = _GDIPlus_PenCreate(0xFF00FF00,1,2) $lines = _FileCountLines($file) $s1 = stringsplit(filereadline($file,1),chr(32)) for $i = 2 to $lines $s = stringsplit(filereadline($file,$i),chr(32)) $ss = $s[1] $color = iniread("colors.ini","colors",$s1[$ss],0) if stringinstr($color,chr(44)) then $s2 = stringsplit($color,chr(44)) $s2 = "0xFF"&hex($s2[1],2)&hex($s2[2],2)&hex($s2[3],2) _GDIPlus_PenSetColor($hpen,$s2) Else _GDIPlus_PenSetColor($hpen,0x00000000) EndIf _GDIPlus_GraphicsDrawRect ($hGraphic, $s[2]*2, $s[3]*2, 1,1,$hPen) Next EndFuncfiles.zip Link to comment Share on other sites More sharing options...
UEZ Posted March 14, 2011 Share Posted March 14, 2011 (edited) Try this: expandcollapse popup#include <GuiConstantsEx.au3> #include <GDIPlus.au3> #include <file.au3> Opt('MustDeclareVars', 1) Global $hGUI, $hWnd, $hGraphic, $hPen, $hBrush, $s, $lines, $s1, $x, $color, $ss Global $s2, $file, $label, $msg, $button1, $button2 $file = @ScriptDir & "\test.txt" Global $width = 300 Global $height = 200 $hGUI = GUICreate("Test", $width, $height) GUISetBkColor("0x181717") $button1 = GUICtrlCreateButton("Minimap", 5, 170, 50, 21) $button2 = GUICtrlCreateButton("Load Minimap", 55, 170, 80, 21) GUISetState() _GDIPlus_Startup() $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) #region exclude GUI controls from GDI+ graphic screen Global Const $GW_CHILD = 5, $GW_HWNDNEXT = 2 Global $hRegion = _GDIPlus_RegionCreateFromRect(_GDIPlus_RectFCreate(0, 0, $width, $height)) Global $hChild = _WinAPI_GetWindow($hGUI, $GW_CHILD) Global $aRect Do $aRect = ControlGetPos($hChild, "", 0) _GDIPlus_RegionCombineRect($hRegion, _GDIPlus_RectFCreate($aRect[0], $aRect[1], $aRect[2], $aRect[3]), 3) $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT) Until Not $hChild _GDIPlus_GraphicsSetClipRegion($hGraphic, $hRegion) _GDIPlus_RegionDispose($hRegion) #endregion exclude GUI controls from GDI+ graphic screen $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) $hPen = _GDIPlus_PenCreate(0xFF696969) Global Const $iWidth = 82 Global Const $iHeight = 60 Global Const $iX = 5 Global Const $iY = 100 _GDIPlus_GraphicsFillRect($hGraphic, $iX + 1, $iY + 1, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawRect($hGraphic, $iX, $iY, $iWidth + 1, $iHeight + 1, $hPen) Global $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) Global $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iWidth, $iHeight, $hBrush) update($file) Global $button1_status = 1 While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_GraphicsDispose($hContext) _GDIPlus_BrushDispose($hBrush) _GDIPlus_PenDispose($hPen) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_Shutdown() Exit Case $button1 _GDIPlus_GraphicsFillRect($hGraphic, $iX + 1, $iY + 1, $iWidth, $iHeight, $hBrush) If $button1_status = 1 Then _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, $iX + 1, $iY + 1, $iWidth, $iHeight) $button1_status *= -1 Case $button2 $file = FileOpenDialog("Select a file with pixel information", @ScriptDir, "(*.txt)") If Not @error Then update($file) EndSwitch WEnd Func update($file) _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iWidth, $iHeight, $hBrush) $lines = _FileCountLines($file) $s1 = StringSplit(FileReadLine($file, 1), Chr(32)) For $i = 2 To $lines $s = StringSplit(FileReadLine($file, $i), Chr(32)) $ss = $s[1] $color = IniRead("colors.ini", "colors", $s1[$ss], 0) If StringInStr($color, Chr(44)) Then $s2 = StringSplit($color, Chr(44)) $s2 = "0xFF" & Hex($s2[1], 2) & Hex($s2[2], 2) & Hex($s2[3], 2) _GDIPlus_PenSetColor($hPen, $s2) Else _GDIPlus_PenSetColor($hPen, 0x00000000) EndIf _GDIPlus_GraphicsDrawRect($hContext, $s[2] * 2, $s[3] * 2, 1, 1, $hPen) Next EndFunc ;==>update Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetClipRegion Func _GDIPlus_RegionCreateFromRect($tRectF) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_RegionCreateFromRect Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionCombineRect Func _GDIPlus_RegionDispose($hRegion) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionDispose Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0 Br, UEZ Edited March 15, 2011 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
greymouse Posted March 14, 2011 Author Share Posted March 14, 2011 (edited) Try this:Hmm, it doesn't do what i want.When i click on the minimap it should open the minimap and close when i click the 2nd time. (Also hide/show the label)But before the opening it should generate the GDI. So it's already done. Now it's just like before.I got it to work if i use this method, ugly but works.Edit: Now i can't have it smaller, ooh this is so bad.expandcollapse popup#include <GuiConstantsEx.au3> #include <GDIPlus.au3> #include <misc.au3> #include <file.au3> Opt('MustDeclareVars', 1) Global $hGUI, $hWnd, $hGraphic, $hPen,$s,$lines,$s1,$x,$color,$ss Global $s2,$file,$label,$msg,$button1 $file = "test.txt" $hGUI = GUICreate("Test", 500, 200) guisetbkcolor("0x181717") $label = guictrlcreatelabel("",400,100,84,62) guictrlsetbkcolor(-1,"0x000000") $button1 = guictrlcreatebutton("Minimap",5,170,50,21) $hwnd = guictrlgethandle($label) GUISetState() while 1 $msg = GUIGetMsg() switch $msg case $GUI_EVENT_CLOSE _GDIPlus_Shutdown () Exit case $button1 $s= controlgetpos($hgui,"",$hwnd) if $s[0] == 5 and $s[1] == 100 then controlmove($hgui,"",$label,400,100,84,62) Else update() controlmove($hgui,"",$label,5,100,84,62) EndIf EndSwitch WEnd func update() _GDIPlus_Startup () $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hwnd) _GDIPlus_GraphicsClear($hgraphic,0x000000) $hpen = _GDIPlus_PenCreate(0xFF696969) _GDIPlus_GraphicsDrawRect ($hGraphic, 0, 0, 83,61,$hPen) $hpen = _GDIPlus_PenCreate(0xFF00FF00,1,2) $lines = _FileCountLines($file) $s1 = stringsplit(filereadline($file,1),chr(32)) for $i = 2 to $lines $s = stringsplit(filereadline($file,$i),chr(32)) $ss = $s[1] $color = iniread("colors.ini","colors",$s1[$ss],0) if stringinstr($color,chr(44)) then $s2 = stringsplit($color,chr(44)) $s2 = "0xFF"&hex($s2[1],2)&hex($s2[2],2)&hex($s2[3],2) _GDIPlus_PenSetColor($hpen,$s2) Else _GDIPlus_PenSetColor($hpen,0x00000000) EndIf _GDIPlus_GraphicsDrawRect ($hGraphic, $s[2]*2, $s[3]*2, 1,1,$hPen) Next _GDIPlus_PenDispose ($hPen) _GDIPlus_GraphicsDispose ($hGraphic) EndFunc Edited March 14, 2011 by greymouse Link to comment Share on other sites More sharing options...
UEZ Posted March 14, 2011 Share Posted March 14, 2011 I updated the code from post#2. Is this what you want to do? Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
greymouse Posted March 14, 2011 Author Share Posted March 14, 2011 I updated the code from post#2. Is this what you want to do?Br,UEZYes like that, but instead of the wolf been creating when you press minimap.It should be created before. So it's already done. So you don't see when the pixels loads. Link to comment Share on other sites More sharing options...
UEZ Posted March 14, 2011 Share Posted March 14, 2011 Ok, another try then. Look again to post#2. Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
greymouse Posted March 14, 2011 Author Share Posted March 14, 2011 Ok, another try then. Look again to post#2.Br,UEZWorks really nice. It's nice from you to give the whole code too.But to learn, what does all this do. And how does it work?I'm not so good at Autoit and really want to learn more each day.expandcollapse popup#region exclude GUI controls from GDI+ graphic screen Global Const $GW_CHILD = 5, $GW_HWNDNEXT = 2 Global $hRegion = _GDIPlus_RegionCreateFromRect(_GDIPlus_RectFCreate(0, 0, $width, $height)) Global $hChild = _WinAPI_GetWindow($hGUI, $GW_CHILD) Global $aRect Do $aRect = ControlGetPos($hChild, "", 0) _GDIPlus_RegionCombineRect($hRegion, _GDIPlus_RectFCreate($aRect[0], $aRect[1], $aRect[2], $aRect[3]), 3) $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT) Until Not $hChild _GDIPlus_GraphicsSetClipRegion($hGraphic, $hRegion) _GDIPlus_RegionDispose($hRegion) #endregion Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetClipRegion Func _GDIPlus_RegionCreateFromRect($tRectF) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_RegionCreateFromRect Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionCombineRect Func _GDIPlus_RegionDispose($hRegion) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionDispose Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0And one more thing. The minimap is going to be updated when everyone click on the minimap.People drawing and it saving the colors, and the minimap need to clear the recent picture.And one more thing. How do i remove the rectangle when i close the minimap?I only come to this stage, then didn't i understand how i should create it.expandcollapse popup#include <GuiConstantsEx.au3> #include <GDIPlus.au3> #include <misc.au3> #include <file.au3> Opt('MustDeclareVars', 1) Global $hGUI, $hWnd, $hGraphic, $hPen, $hBrush, $s,$lines,$s1,$x,$color,$ss Global $s2,$file,$label,$msg,$button1 $file = @ScriptDir & "\test.txt" Global $width = 300 Global $height = 200 $hGUI = GUICreate("Test", $width, $height) guisetbkcolor("0x181717") ;~ $label = guictrlcreatelabel("",5,100,84,62) ;~ guictrlsetbkcolor(-1,"0x000000") ;~ guictrlsetstate(-1,$GUI_HIDE) $button1 = guictrlcreatebutton("Minimap",5,170,50,21) GUISetState() _GDIPlus_Startup () $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) #region exclude GUI controls from GDI+ graphic screen Global Const $GW_CHILD = 5, $GW_HWNDNEXT = 2 Global $hRegion = _GDIPlus_RegionCreateFromRect(_GDIPlus_RectFCreate(0, 0, $width, $height)) Global $hChild = _WinAPI_GetWindow($hGUI, $GW_CHILD) Global $aRect Do $aRect = ControlGetPos($hChild, "", 0) _GDIPlus_RegionCombineRect($hRegion, _GDIPlus_RectFCreate($aRect[0], $aRect[1], $aRect[2], $aRect[3]), 3) $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT) Until Not $hChild _GDIPlus_GraphicsSetClipRegion($hGraphic, $hRegion) _GDIPlus_RegionDispose($hRegion) #endregion $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) $hpen = _GDIPlus_PenCreate(0xFF696969) Global $hBitmap = _GDIPlus_BitmapCreateFromScan0($width, $height) Global $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsFillRect($hContext, 6, 101, 81, 59, $hBrush) Global $button1_status = 1 while 1 $msg = GUIGetMsg() switch $msg case $GUI_EVENT_CLOSE _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_GraphicsDispose($hContext) _GDIPlus_BrushDispose($hBrush) _GDIPlus_PenDispose($hpen) _GDIPlus_GraphicsDispose($hgraphic) _GDIPlus_Shutdown () Exit case $button1 If $button1_status = 1 Then _GDIPlus_GraphicsFillRect($hGraphic, 6, 101, 81, 59, $hBrush) _GDIPlus_PenSetColor($hpen, 0xFF696969) _GDIPlus_GraphicsDrawRect ($hGraphic, 5, 100, 83,61,$hPen) update() _GDIPlus_GraphicsDrawImage($hgraphic, $hBitmap, 5, 100) Else _GDIPlus_GraphicsClear ($hgraphic) EndIf $button1_status *= -1 EndSwitch WEnd func update() $lines = _FileCountLines($file) $s1 = stringsplit(filereadline($file,1),chr(32)) for $i = 2 to $lines $s = stringsplit(filereadline($file,$i),chr(32)) $ss = $s[1] $color = iniread("colors.ini","colors",$s1[$ss],0) if stringinstr($color,chr(44)) then $s2 = stringsplit($color,chr(44)) $s2 = "0xFF"&hex($s2[1],2)&hex($s2[2],2)&hex($s2[3],2) _GDIPlus_PenSetColor($hpen,$s2) Else _GDIPlus_PenSetColor($hpen,0x00000000) EndIf _GDIPlus_GraphicsDrawRect ($hContext, $s[2]*2, $s[3]*2, 1,1,$hPen) Next EndFunc Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetClipRegion Func _GDIPlus_RegionCreateFromRect($tRectF) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_RegionCreateFromRect Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionCombineRect Func _GDIPlus_RegionDispose($hRegion) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionDispose Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0 Link to comment Share on other sites More sharing options...
UEZ Posted March 14, 2011 Share Posted March 14, 2011 Works really nice. It's nice from you to give the whole code too.But to learn, what does all this do. And how does it work?I'm not so good at Autoit and really want to learn more each day.expandcollapse popup#region exclude GUI controls from GDI+ graphic screen Global Const $GW_CHILD = 5, $GW_HWNDNEXT = 2 Global $hRegion = _GDIPlus_RegionCreateFromRect(_GDIPlus_RectFCreate(0, 0, $width, $height)) Global $hChild = _WinAPI_GetWindow($hGUI, $GW_CHILD) Global $aRect Do $aRect = ControlGetPos($hChild, "", 0) _GDIPlus_RegionCombineRect($hRegion, _GDIPlus_RectFCreate($aRect[0], $aRect[1], $aRect[2], $aRect[3]), 3) $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT) Until Not $hChild _GDIPlus_GraphicsSetClipRegion($hGraphic, $hRegion) _GDIPlus_RegionDispose($hRegion) #endregion Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetClipRegion Func _GDIPlus_RegionCreateFromRect($tRectF) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_RegionCreateFromRect Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionCombineRect Func _GDIPlus_RegionDispose($hRegion) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionDispose Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0Well, as it is descriped it excludes GUI controls from GDI+ graphic screen. E.g. move the button over the picture and it will not be erased when the picture will be refreshed.And one more thing. The minimap is going to be updated when everyone click on the minimap.People drawing and it saving the colors, and the minimap need to clear the recent picture.I don't understand you exactly what you want! And one more thing. How do i remove the rectangle when i close the minimap?I only come to this stage, then didn't i understand how i should create it.Also here, I don't understand what you mean with "remove the rectangle when i close the minimap"!Br,UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
greymouse Posted March 15, 2011 Author Share Posted March 15, 2011 Well, as it is descriped it excludes GUI controls from GDI+ graphic screen. E.g. move the button over the picture and it will not be erased when the picture will be refreshed. I don't understand you exactly what you want! Also here, I don't understand what you mean with "remove the rectangle when i close the minimap"! Br, UEZ I mean, it should close the minimap. And then open it. Not be open forever. ^ And here is what i want it to be ^ With the pixels that "BitmapCreateFromScan0" saves. Need to be cleared. Because if i load a new "text2.txt" it's will not be cleared. ^ Here is the example for that, test2.txt added as attachment. ^ expandcollapse popup#include <GuiConstantsEx.au3> #include <GDIPlus.au3> #include <misc.au3> #include <file.au3> Opt('MustDeclareVars', 1) Global $hGUI, $hWnd, $hGraphic, $hPen, $hBrush, $s,$lines,$s1,$x,$color,$ss Global $s2,$file,$label,$msg,$button1 $file = @ScriptDir & "\test.txt" Global $width = 300 Global $height = 200 $hGUI = GUICreate("Test", $width, $height) guisetbkcolor("0x181717") ;~ $label = guictrlcreatelabel("",5,100,84,62) ;~ guictrlsetbkcolor(-1,"0x000000") ;~ guictrlsetstate(-1,$GUI_HIDE) $button1 = guictrlcreatebutton("Minimap",5,170,50,21) GUISetState() _GDIPlus_Startup () $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI) #region exclude GUI controls from GDI+ graphic screen Global Const $GW_CHILD = 5, $GW_HWNDNEXT = 2 Global $hRegion = _GDIPlus_RegionCreateFromRect(_GDIPlus_RectFCreate(0, 0, $width, $height)) Global $hChild = _WinAPI_GetWindow($hGUI, $GW_CHILD) Global $aRect Do $aRect = ControlGetPos($hChild, "", 0) _GDIPlus_RegionCombineRect($hRegion, _GDIPlus_RectFCreate($aRect[0], $aRect[1], $aRect[2], $aRect[3]), 3) $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT) Until Not $hChild _GDIPlus_GraphicsSetClipRegion($hGraphic, $hRegion) _GDIPlus_RegionDispose($hRegion) #endregion $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) $hpen = _GDIPlus_PenCreate(0xFF696969) Global $hBitmap = _GDIPlus_BitmapCreateFromScan0($width, $height) Global $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsFillRect($hContext, 6, 101, 81, 59, $hBrush) Global $button1_status = 1 while 1 $msg = GUIGetMsg() switch $msg case $GUI_EVENT_CLOSE _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_GraphicsDispose($hContext) _GDIPlus_BrushDispose($hBrush) _GDIPlus_PenDispose($hpen) _GDIPlus_GraphicsDispose($hgraphic) _GDIPlus_Shutdown () Exit case $button1 If $button1_status = 1 Then _GDIPlus_GraphicsFillRect($hGraphic, 6, 101, 81, 59, $hBrush) _GDIPlus_PenSetColor($hpen, 0xFF696969) _GDIPlus_GraphicsDrawRect ($hGraphic, 5, 100, 83,61,$hPen) update() _GDIPlus_GraphicsDrawImage($hgraphic, $hBitmap, 5, 100) Else $file = @ScriptDir & "\test2.txt" ; Just a test, this shouldn't be here update() ; Just a test, this shouldn't be here _GDIPlus_GraphicsDrawImage($hgraphic, $hBitmap, 5, 100) ; Just a test, this shouldn't be here EndIf $button1_status *= -1 EndSwitch WEnd func update() $lines = _FileCountLines($file) $s1 = stringsplit(filereadline($file,1),chr(32)) for $i = 2 to $lines $s = stringsplit(filereadline($file,$i),chr(32)) $ss = $s[1] $color = iniread("colors.ini","colors",$s1[$ss],0) if stringinstr($color,chr(44)) then $s2 = stringsplit($color,chr(44)) $s2 = "0xFF"&hex($s2[1],2)&hex($s2[2],2)&hex($s2[3],2) _GDIPlus_PenSetColor($hpen,$s2) Else _GDIPlus_PenSetColor($hpen,0x00000000) EndIf _GDIPlus_GraphicsDrawRect ($hContext, $s[2]*2, $s[3]*2, 1,1,$hPen) Next EndFunc Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetClipRegion Func _GDIPlus_RegionCreateFromRect($tRectF) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_RegionCreateFromRect Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2) Local $pRectF, $aResult $pRectF = DllStructGetPtr($tRectF) $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionCombineRect Func _GDIPlus_RegionDispose($hRegion) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_RegionDispose Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0test2.txt Link to comment Share on other sites More sharing options...
UEZ Posted March 15, 2011 Share Posted March 15, 2011 (edited) Look to post#2 again. I hope this is what you want. Now it is your turn to fine tune the code to fullfill your needs. Br, UEZ Edited March 15, 2011 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now