找回密码
 加入
搜索
查看: 5682|回复: 6

[GUI管理] [已解决] 分辨率改变后,$WS_POPUP 样式的子窗口会与父窗口错位

  [复制链接]
发表于 2012-4-13 00:14:07 | 显示全部楼层 |阅读模式
本帖最后由 yhxhappy 于 2012-4-14 21:54 编辑

小弟在做一个驱动安装的程序,当安装到显卡驱动时,分辨率经常会改变。此时 $WS_POPUP 样式的子窗口就会与父窗口错位,见下图。
子窗口我还增加了$WS_EX_MDICHILD样式,以保证它能与父窗口一起移动。

还请大家帮看看,在没找到解决办法之前,我打算这样处理:
先注册分辨率改变的消息 GUIRegisterMsg($WM_DISPLAYCHANGE, "")
当检测到分辨率改变时,再对比各子窗口与父窗口坐标,发现不对再校正。但我有好几个子窗口,写起来挺麻烦的
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$GUI = GUICreate("函数演示", 400, 300)                                 ; 创建居中显示的对话框窗口

GUISetState()

GUICreate("", 300, 200, 50, 50, $WS_POPUP+$WS_BORDER, $WS_EX_MDICHILD, $GUI)         ;子窗口
        GUISetBkColor(0xffff00)
GUICtrlCreateLabel("黄色窗口是子窗口", 100, 100, 120, 30)

GUISetState()


; 运行 GUI,直到对话框窗口关闭
While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then Exit
WEnd
为什么用这么多子窗口,主要是因为:子窗口根据父窗口点击的项目,实时创建一些控件,因为控件的数量是随机的,而且点击父窗口另外一个项目时,子窗口内的控件要全部清除再刷新。
我感觉删除项目很麻烦,干脆直接删掉子窗口再重建。

本帖子中包含更多资源

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

×
发表于 2012-4-13 00:42:56 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$GUI = GUICreate("函数演示", 400, 300) ; 创建居中显示的对话框窗口
GUISetState()

$form = GUICreate("", 300, 200,-1, -1, $WS_POPUP + $WS_BORDER, $WS_EX_MDICHILD, $GUI) ;子窗口
GUISetBkColor(0xffff00)
$label = GUICtrlCreateLabel("黄色窗口是子窗口", 100, 100, 120, 30)
GUICtrlSetResizing($label, $GUI_DOCKALL)
GUISetState()
WM_MOVE()
GUIRegisterMsg($WM_MOVE, "WM_MOVE")

; 运行 GUI,直到对话框窗口关闭
While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then Exit
WEnd

Func WM_MOVE()
        Local $pos = WinGetPos($GUI)
        WinMove($form, "", $pos[0] + 50, $pos[1] + 50)
EndFunc   ;==>WM_MOVE

评分

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

查看全部评分

发表于 2012-4-13 07:51:26 | 显示全部楼层
学 习 了 ,
 楼主| 发表于 2012-4-13 10:58:11 | 显示全部楼层
回复 2# haijie1223


    对Windows 系统消息代码不懂。我查了$WM_MOVE是移动一个窗口,这个在不是鼠标操作时是否有效?如果我正常的拖动父窗口,WM_MOVE()函数会不会也响应,这样会不会增加负荷?
发表于 2012-4-13 11:07:14 | 显示全部楼层
回复 4# yhxhappy


    注册成消息,所以在不操作鼠标的时候也管用,只要前一个窗口的位置变化,这个就会随之变化,至于增补增加负荷,你对比下cpu和内存占用,应该可以忽略不计吧。
发表于 2014-5-11 08:37:48 | 显示全部楼层
是标签,不是子窗口
发表于 2016-9-19 10:50:15 | 显示全部楼层
学习了,谢谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 19:04 , Processed in 0.082789 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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