找回密码
 加入
搜索
查看: 6365|回复: 8

[图形处理] 创建一个GUI图形界面控件后,更新后图片显示太小

  [复制链接]
发表于 2010-5-1 19:18:19 | 显示全部楼层 |阅读模式
第一次发帖,初学AU3,菜的很啊。望各位不要笑话。

想做个类似OEM-DIY的工具,但是苦于找不到完美解决OEMLOGO显示的问题

我的创建代码:
$pic=GUICtrlCreatePic(@TempDir & "\oemlogo.bmp",60,100,0,0)

这个设为0显示默认大小

我使用更新后代码:

UICtrlSetImage($pic, "")
GUICtrlSetImage($pic,@TempDir & "\OEM1.bmp")

问题是图片很小,不是正常尺寸。

那位高人知道解决方法帮帮忙啊。

另外OEMLOGO是在图片控件上显示了,我怎么做到选择相应的品牌复制相应的OEMLOGO呢?
发表于 2010-5-1 19:55:34 | 显示全部楼层
程序界面如下图。



代码在这里,
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
;M:\网络游戏\天之翼\TZY.exe 99c6bcfe8f8deb515a6f27ddf4aa8aaa8f8deb515a6f27dd
HotKeySet("{F9}","StartLabClick")
HotKeySet("{F10}","StopLabClick")
#Region ### START Koda GUI section ### Form=C:\Documents and Settings\Administrator\桌面\Form1.kxf
$Form1 = GUICreate("天之翼", 516, 563, 242, 97)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$MapShow = GUICtrlCreatePic("", 0, 48, 513, 513)
GUICtrlSetOnEvent(-1, "MapShowClick")
$MapChose = GUICtrlCreateCombo("选择地图", 0, 8, 161, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "夜色镇(新手村)|风元素区(5-12级)|火元素区(12-19级)|沙塔尔之森(19-26级)")
GUICtrlSetFont(-1, 11, 400, 0, "宋体")
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetOnEvent(-1, "MapChoseChange")
$StartLab = GUICtrlCreateLabel("开始挂机", 200, 8, 64, 19)
GUICtrlSetFont(-1, 11, 400, 4, "宋体")
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetOnEvent(-1, "StartLabClick")
$StopLab = GUICtrlCreateLabel("停止挂机", 312, 8, 64, 19)
GUICtrlSetFont(-1, 11, 400, 4, "宋体")
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetOnEvent(-1, "StopLabClick")
$AutoFightCheckBox = GUICtrlCreateCheckbox("自动战斗", 392, 8, 89, 17)
GUICtrlSetFont(-1, 11, 400, 0, "宋体")
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetOnEvent(-1, "AutoFightCheckBoxClick")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $ChosedMap
Global $Start=False
Global $AutoSelect=True
While 1
;~         ;检查游戏是否运行
;~         If ProcessExists("TZY.EXE") And $MoveFlg=True Then
;~                 $TzyPos=WinGetPos("天之翼Online V1.1.3")
;~                 WinMove("天之翼Online V1.1.3","",0,0)
;~                 WinMove("天之翼Online V1.1.3","",$TzyPos[0],$TzyPos[1])
;~                 $MoveFlg=False
;~         EndIf
        If $AutoSelect=True Then
            CheckAutoFight()
        EndIf
        If $Start=True Then
                CheckAutoFight()
                Select 
                        Case $ChosedMap="夜色镇(新手村)"
                                MsgBox(16,"错误!","新手村无法挂机!")
                                $Start=False
                        Case $ChosedMap="风元素区(5-12级)"
                                AutoFight()
                        Case $ChosedMap="火元素区(12-19级)"
                                AutoFight()
                        Case $ChosedMap="沙塔尔之森(19-26级)"
                                AutoFight()
                EndSelect
        EndIf
        
        Sleep(100)
WEnd

Func Form1Close()
        Exit

EndFunc

Func MapChoseChange()
        $ChosedMap=GUICtrlRead($MapChose)
        Select 
                Case $ChosedMap="夜色镇(新手村)"
                        GUICtrlSetImage($MapShow,"ysz.jpg")
                Case $ChosedMap="风元素区(5-12级)"
                        GUICtrlSetImage($MapShow,"fys.jpg")
                Case $ChosedMap="火元素区(12-19级)"
                        GUICtrlSetImage($MapShow,"hys.jpg")
                Case $ChosedMap="沙塔尔之森(19-26级)"
                        GUICtrlSetImage($MapShow,"ste.jpg")
        EndSelect
EndFunc
Func MapShowClick()
        $PicPos=ControlGetPos($Form1,"",$MapShow)
        $NowMousePos=MouseGetPos()
        WinActivate("天之翼Online V1.1.3")
        Sleep(400)
        ;245--679 为游戏地图的0-0坐标
EndFunc
Func StartLabClick()
        $Start=True
EndFunc
Func StopLabClick()
        $Start=False
EndFunc

Func AutoFightCheckBoxClick()
        If GUICtrlRead($AutoFightCheckBox)=$GUI_CHECKED Then
                $AutoSelect=True
        Else
                $AutoSelect=False
        EndIf
EndFunc

Func AutoFight()
        ;如果在战斗中,则不自动搜怪。
        If PixelGetColor(864,612)=0x6eceff Then
                WinActivate("天之翼Online V1.1.3")
        Else
                WinActivate("天之翼Online V1.1.3")
                MouseClick("left","600","495",2,1)
                Sleep(500)
                MouseClick("left","400","495",2,1)
                Sleep(500)
        EndIf
EndFunc

Func CheckAutoFight()
        ;如果没有自动战斗,则点自动战斗
        If WinActive("天之翼Online V1.1.3") Then
                If PixelGetColor(739,140)<>0x6bcfff And PixelGetColor(864,612)=0x6eceff Then
                        MouseClick("left",750,255,2,1)
                        Sleep(200)
                        MouseClick("left",752,584,2,1)
                EndIf
        EndIf
EndFunc

        
;~ Func CheckHP()
;~         MsgBox(0,"",PixelGetColor(275,120))
;~         MsgBox(0,"",PixelGetColor(275,140))
;~ EndFunc
源码和用到的图片压缩包在附件中。你可以下载测试。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +25 收起 理由
afan + 25

查看全部评分

 楼主| 发表于 2010-5-2 09:52:19 | 显示全部楼层
本帖最后由 ROUSTAR31 于 2010-5-2 09:53 编辑

谢谢楼主,不过你的代码看的很晕啊

能不能直接说说怎么做到更新图片控件后图片还是显示默认大小呢?
 楼主| 发表于 2010-5-2 09:54:43 | 显示全部楼层
补充一下,OEMLOGO图片大小都不一样的

看楼主的图片显示使用了自定义的$MAPSHOW,大小是规定死了的
发表于 2010-5-2 11:00:53 | 显示全部楼层
晕晕额的!!
发表于 2010-5-2 18:59:23 | 显示全部楼层
试试先删除图片控件再重建并装载下一张图片
发表于 2010-5-2 22:10:14 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $gui, $guiPos, $pic, $picPos

Example1()
;Example2()

;----- example 1 ----
Func Example1()
        Local $n, $msg
        
        GUICreate("My GUI picture", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)  ; will create a dialog box that when displayed is centered

        GUISetBkColor(0xE0FFFF)
        $n = GUICtrlCreatePic(@TempDir & "\oemlogo.bmp", 50, 50, 200, 50)
        
        GUISetState()

        ; Run the GUI until the dialog is closed
        While 1
                $msg = GUIGetMsg()
                
                If $msg = $GUI_EVENT_CLOSE Then ExitLoop
        WEnd


        ; resize the control
        GUICtrlSetImage($n,@TempDir & "\OEM1.bmp")
        $n = GUICtrlSetPos($n, 50, 50, 200, 100)
        ; Run the GUI until the dialog is closed
        While 1
                $msg = GUIGetMsg()
                
                If $msg = $GUI_EVENT_CLOSE Then ExitLoop
        WEnd
        
        GUIDelete()
EndFunc 

评分

参与人数 1金钱 +25 收起 理由
afan + 25

查看全部评分

发表于 2010-7-1 15:06:16 | 显示全部楼层
回复 7# 3mile


    这个代码有创意
发表于 2010-7-1 15:25:01 | 显示全部楼层
克服看超过50行代码头就晕的毛病,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-10 13:44 , Processed in 0.105803 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表