KLU3K 发表于 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

sensel 发表于 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

17911 发表于 2009-5-25 11:09:30

怎么没有最大化和恢复

sensel 发表于 2009-5-25 14:39:08

怎么没有最大化和恢复
17911 发表于 2009-5-25 11:09 http://www.autoitx.com/images/common/back.gif

去看帮助文件GUICreate函数说明,风格部分。

lynfr8 发表于 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, 新样式,...).

user3000 发表于 2011-6-22 04:00:02

受教了,谢谢

q76609288 发表于 2014-7-15 15:14:27

学习一下 0.0

q76609288 发表于 2014-7-15 15:14:45

貌似不错的样子
页: [1]
查看完整版本: 写了一个最小化到系统栏+还原,请教还有更好的办法么?