[已解决]求解调整窗口样式函数 GUISetStyle 的用法
本帖最后由 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 的用法有错误呢? 求解! 谢谢!!! WS_MAXIMIZE 这个风格只在窗口初始化期间有效。第一段代码调用GUISetStyle重新设置风格时,初始化已经结束。没有边框是因为,在设置新的风格时,原有的风格没有同时指定。 界面开发的辅助工具我一般用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改变 界面开发的辅助工具我一般用Koda,我测试了一下,建议你的Style还是在GUICreate时使用吧,使用GUISetStyle和 ...
mbdnmt 发表于 2013-3-20 00:45 http://www.autoitx.com/images/common/back.gif
什么系统测试的,我在 Xp ,win7 这样测试,仍然还是无边框的窗口,也不是最大化状态!!!! 回复 2# pusofalse
谢谢!!!道理明白了,但如果要如第一个代码的语法形式,应该如何添加样式呐。。。。 回复 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 本帖最后由 131738 于 2013-3-20 17:54 编辑
回复131738
haijie1223 发表于 2013-3-20 08:04 http://www.autoitx.com/images/common/back.gif
谢谢!!!但这个工具自动生成的代码格式不是这样设计的,
创建语句总是生成: $hGUI = GUICreate("新建窗体", 468, 323, -1, -1)
所有添加的样式都是由: GUISetStyle( BitOr(........)) 解决。。。。
你的这个解决方法恐怕不适合自动化处理吧。。。。
我正在试试修改这两句代码为一句,不用 GUISetStyle( BitOr(........)),以我水平,难度很大。。。。。 回复 7# 131738
前辈过谦了,没有细研究,根据P版的提示,就顺着改了一下。 正好我也很想知道,帮顶一下~~ #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 #include
#include
#include
#include
$hGUI = GUICreate( "新建窗体", 468, 323, -1, -1)
GUIS ...
ceoguang 发表于 2013-3-25 00:46 http://www.autoitx.com/images/common/back.gif
谢谢!!!这个还是不能初始最大化!
不过这个问题我以解决了。。。。。 这种自动生成脚本的工具都是先赋值各个组件的数据,最后再组装输出,也就是说在组装的时候可以任意调整组件的位置。将 GUISetStyle 里面的两个组件安在 GUICreate 里面就完事了~ 谢谢!!!这个还是不能初始最大化!
不过这个问题我以解决了。。。。。
131738 发表于 2013-3-25 01:27 http://www.autoitx.com/images/common/back.gif
初始最大化必须在创建时指定WS_MAXIMIZE式样,反之由GUISetState设置SW_MAXIMIZE状态 这种自动生成脚本的工具都是先赋值各个组件的数据,最后再组装输出,也就是说在组装的时候可以任意调整组件 ...
afan 发表于 2013-3-25 03:31 http://www.autoitx.com/images/common/back.gif
已是这样解决!以我水平,花了好几天时间才闹明白的。。。。 初始最大化必须在创建时指定WS_MAXIMIZE式样,反之由GUISetState设置SW_MAXIMIZE状态
ceoguang 发表于 2013-3-26 20:55 http://www.autoitx.com/images/common/back.gif
[反之由GUISetState设置SW_MAXIMIZE状态] 没效果的。。。。。
必须在 GUICreate 中解决。。。。我是这样理解的。。。。
页:
[1]
2