找回密码
 加入
搜索
查看: 4863|回复: 7

写了一个最小化到系统栏+还原,请教还有更好的办法么?

[复制链接]
发表于 2009-5-24 23:35:54 | 显示全部楼层 |阅读模式
本帖最后由 KLU3K 于 2009-5-25 18:24 编辑

1. 感觉代码比较长,有简洁一些的写法么?主要就是最小化和还原功能的精简(23-35行的精简办法)。
2. 还原功能目前有瑕疵,在Win7下测试有时候是比较平滑的,有时候会从莫名其妙的地方还原回来。不稳定,有什么办法解决?
3. 点击系统栏图标后让窗口最小化到系统栏怎么写?


include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
Opt("GUIOnEventMode", 1)
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)
$Form1 = GUICreate("Form1", 180, 180, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "Form1RESTORE")
GUISetState(@SW_SHOW)

While 1
        Sleep(100)
WEnd

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close

Func Form1Minimize()
        Select
                Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
                        GUISetState(@SW_HIDE, $Form1)
        EndSelect
EndFunc   ;==>Form1Minimize

Func Form1RESTORE()
        Select
                Case @TRAY_ID = $TRAY_EVENT_PRIMARYDOWN
                        GUISetState(@SW_SHOW, $Form1)
        EndSelect
EndFunc   ;==>Form1RESTORE
发表于 2009-5-25 02:55:17 | 显示全部楼层
本帖最后由 sensel 于 2009-5-25 03:07 编辑

看不懂。最小化事件后还要判断控件ID?难道你的窗口上还有别的控件会产生最小化事件?
至于点击系统栏图标来显示/隐藏主窗口,获得$TRAY_EVENT_PRIMARYDOWN事件后判断一下窗口当前状态,如果显示则隐藏,否则反之。
下面的代码,那2条最小化和恢复,是为了做出窗口动画效果。

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
Opt("GUIOnEventMode", 1)
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)

$Form1 = GUICreate("Form1", 180, 180, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "Form1RESTORE")
GUISetState(@SW_SHOW)

While 1
        Sleep(100)
WEnd

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close

Func Form1Minimize()
        GUISetState(@SW_HIDE, $Form1)
EndFunc   ;==>Form1Minimize

Func Form1RESTORE()
        If BitAND(WinGetState($Form1), 2) Then
                GUISetState(@SW_MINIMIZE, $Form1)
                GUISetState(@SW_HIDE, $Form1)
        Else
                GUISetState(@SW_RESTORE, $Form1)
                GUISetState(@SW_SHOW, $Form1)
        EndIf
EndFunc   ;==>Form1RESTORE

评分

参与人数 1金钱 +3 收起 理由
KLU3K + 3 问题解决,感谢您的帮助

查看全部评分

发表于 2009-5-25 11:09:30 | 显示全部楼层
怎么没有最大化和恢复
发表于 2009-5-25 14:39:08 | 显示全部楼层
怎么没有最大化和恢复
17911 发表于 2009-5-25 11:09


去看帮助文件GUICreate函数说明,风格部分。
发表于 2009-5-25 15:24:36 | 显示全部楼层
最大化和恢复
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 633, 447, 192, 124,$WS_OVERLAPPEDWINDOW)
GUISetState(@SW_SHOW)
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd
在默认设置下创建的窗口是不可调整大小并且是不可最大化的.您可以使用 WS_SIZEBOX 或 WS_MAXIMIZEBOX 来添加相应样式.
由于只指定一个风格就只会添加一个样式,所以别忘了和默认的样式组合起来.比如说,如果只是指定 WS_SIZEBOX 那么将没有 WS_MINIMIZEBOX、WS_CAPTION、WS_POPUP、WS_SYSMENU.因此要定义一个可调整大小的窗口最好还是使用 WS_OVERLAPPEDWINDOW.
要在默认风格的基础上添加一个新的样式可使用 BitOr($GUI_SS_DEFAULT_GUI, 新样式,...).

评分

参与人数 1金钱 +3 收起 理由
KLU3K + 3 问题解决,感谢您的帮助

查看全部评分

发表于 2011-6-22 04:00:02 | 显示全部楼层
受教了,谢谢
发表于 2014-7-15 15:14:27 | 显示全部楼层
学习一下 0.0
发表于 2014-7-15 15:14:45 | 显示全部楼层
貌似不错的样子
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-19 06:15 , Processed in 0.081828 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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