找回密码
 加入
搜索
查看: 9675|回复: 16

[AU3基础] [已解决]求解调整窗口样式函数 GUISetStyle 的用法

 火.. [复制链接]
发表于 2013-3-19 19:02:17 | 显示全部楼层 |阅读模式
本帖最后由 131738 于 2013-3-25 01:29 编辑

最近研究国外作品窗口创建工具 Form Builder,
在这个工具中创建一个窗口, 设置窗口样式为: 有最大化按钮 + 初始状态最大化,
下面代码是操作后, 工具自动生成的代码:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

$hGUI = GUICreate( "新建窗体", 468, 323, -1, -1)
GUISetStyle( BitOr( $WS_MAXIMIZEBOX, $WS_MAXIMIZE), -1, $hGUI)
GUISetState()

While 1
        $hMsg = GUIGetMsg()
        Switch $hMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
        
WEnd
但运行结果显示一个无边框的窗口,也不是最大化状态!!!!

去掉函数 GUISetStyle 将代码修改为:
$hGUI = GUICreate( "新建窗体", 468, 323, -1, -1, BitOr( $WS_MAXIMIZEBOX, $WS_MAXIMIZE))

GUISetState()

While 1
        $hMsg = GUIGetMsg()
        Switch $hMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
        
WEnd
再运行代码才显示 有最大化按钮 + 初始状态最大化 的窗口!!!
继续测试这个工具, 窗口无论设置什么样式, 都显示为无边框窗口,
搜索帮助中有关调整窗口样式函数 GUISetStyle 的几个使用示例中, 都是将 GUISetStyle 放在 While 循环中使用,
这是否是这个工具 GUISetStyle 的用法有错误呢? 求解! 谢谢!!!
发表于 2013-3-20 00:15:25 | 显示全部楼层
WS_MAXIMIZE 这个风格只在窗口初始化期间有效。第一段代码调用GUISetStyle重新设置风格时,初始化已经结束。没有边框是因为,在设置新的风格时,原有的风格没有同时指定。
发表于 2013-3-20 00:45:33 | 显示全部楼层
界面开发的辅助工具我一般用Koda,我测试了一下,建议你的Style还是在GUICreate时使用吧,使用GUISetStyle和GUISetState()是有点相互影响的。

试了一下,更改这两句的先后顺序,显示结果还是不一样的
GUISetStyle( BitOr( $WS_MAXIMIZEBOX, $WS_MAXIMIZE), -1, $hGUI)
GUISetState()
更改为
GUISetState()
GUISetStyle( BitOr( $WS_MAXIMIZEBOX, $WS_MAXIMIZE), -1, $hGUI)
换句话说,GUISetState貌似改变了GUISetStyle的风格,而使用GUICreate时带的Style不会被GUISetState改变

评分

参与人数 1金钱 +20 收起 理由
annybaby + 20 亲,一个是设置样式,一个是设置状态,当然是不 ...

查看全部评分

 楼主| 发表于 2013-3-20 01:47:24 | 显示全部楼层
界面开发的辅助工具我一般用Koda,我测试了一下,建议你的Style还是在GUICreate时使用吧,使用GUISetStyle和 ...
mbdnmt 发表于 2013-3-20 00:45


什么系统测试的,我在 Xp ,win7 这样测试,仍然还是无边框的窗口,也不是最大化状态!!!!
 楼主| 发表于 2013-3-20 01:53:02 | 显示全部楼层
回复 2# pusofalse

谢谢!!!道理明白了,但如果要如第一个代码的语法形式,应该如何添加样式呐。。。。
发表于 2013-3-20 08:04:15 | 显示全部楼层
回复 5# 131738


   
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

$hGUI = GUICreate("新建窗体", 468, 323, -1, -1, $WS_MAXIMIZE)
GUISetStyle(BitOR($WS_MAXIMIZEBOX, $WS_MAXIMIZE, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU), -1, $hGUI)
GUISetState()
While 1
        $hMsg = GUIGetMsg()
        Switch $hMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd
 楼主| 发表于 2013-3-20 17:50:13 | 显示全部楼层
本帖最后由 131738 于 2013-3-20 17:54 编辑
回复  131738
haijie1223 发表于 2013-3-20 08:04


谢谢!!!但这个工具自动生成的代码格式不是这样设计的,
创建语句总是生成:   $hGUI = GUICreate("新建窗体", 468, 323, -1, -1)
所有添加的样式都是由: GUISetStyle( BitOr(........  )) 解决。。。。
你的这个解决方法恐怕不适合自动化处理吧。。。。
我正在试试修改这两句代码为一句,不用 GUISetStyle( BitOr(........  )),以我水平,难度很大。。。。。
发表于 2013-3-20 18:02:56 | 显示全部楼层
回复 7# 131738


    前辈过谦了,没有细研究,根据P版的提示,就顺着改了一下。
发表于 2013-3-24 21:45:54 | 显示全部楼层
正好我也很想知道,帮顶一下~~
发表于 2013-3-25 00:46:51 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <winapi.au3>

$hGUI = GUICreate( "新建窗体", 468, 323, -1, -1)
GUISetStyle(BitOr( $WS_MAXIMIZEBOX,_WinAPI_GetWindowLong($hGUI,$GWL_STYLE)), -1, $hGUI)
GUISetState()
While 1
        $hMsg = GUIGetMsg()
        Switch $hMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
        
WEnd
 楼主| 发表于 2013-3-25 01:27:54 | 显示全部楼层
#include
#include
#include
#include

$hGUI = GUICreate( "新建窗体", 468, 323, -1, -1)
GUIS ...
ceoguang 发表于 2013-3-25 00:46


谢谢!!!这个还是不能初始最大化!
不过这个问题我以解决了。。。。。
发表于 2013-3-25 03:31:56 | 显示全部楼层
这种自动生成脚本的工具都是先赋值各个组件的数据,最后再组装输出,也就是说在组装的时候可以任意调整组件的位置。将 GUISetStyle 里面的两个组件安在 GUICreate 里面就完事了~
发表于 2013-3-26 20:55:58 | 显示全部楼层
谢谢!!!这个还是不能初始最大化!
不过这个问题我以解决了。。。。。
131738 发表于 2013-3-25 01:27

初始最大化必须在创建时指定WS_MAXIMIZE式样,反之由GUISetState设置SW_MAXIMIZE状态
 楼主| 发表于 2013-3-26 22:48:13 | 显示全部楼层
这种自动生成脚本的工具都是先赋值各个组件的数据,最后再组装输出,也就是说在组装的时候可以任意调整组件 ...
afan 发表于 2013-3-25 03:31

已是这样解决!以我水平,花了好几天时间才闹明白的。。。。
 楼主| 发表于 2013-3-26 22:50:25 | 显示全部楼层
初始最大化必须在创建时指定WS_MAXIMIZE式样,反之由GUISetState设置SW_MAXIMIZE状态
ceoguang 发表于 2013-3-26 20:55


[反之由GUISetState设置SW_MAXIMIZE状态] 没效果的。。。。。
必须在 GUICreate 中解决。。。。我是这样理解的。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 20:48 , Processed in 0.079563 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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