找回密码
 加入
搜索
查看: 3665|回复: 5

[GUI管理] [已解决] 父窗口控件遮住 $WS_CHILD 样式的子窗口,如何避免?

  [复制链接]
发表于 2012-4-12 23:48:46 | 显示全部楼层 |阅读模式
本帖最后由 yhxhappy 于 2012-4-14 22:04 编辑

我在做一个窗口,父窗口会用到图片做背景,此时再在上面画 $WS_CHILD 样式的子窗口时会被遮住。见下图的效果:
请大家帮看看有什么办法解决。
如果用 $WS_POPUP  样式的子窗口则不会这样,但有个问题是当分辨率改变时,父窗口及子窗口会错位,我另开帖问这个问题。

看来$WS_CHILD样式子窗口无法避免被父窗口控件遮挡了,我试了新版本的AU3,还是一样。
老实用回$WS_POPUP样式,现实中用户运行程序时,分辨率改变的机率很低。


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

$GUI = GUICreate("函数演示", 600, 400)                                 ; 创建居中显示的对话框窗口
GUICtrlCreateLabel(@CRLF & "  这个绿色矩形是父窗口上的控件", 0, 200, 600, 100)
        GUICtrlSetBkColor(-1, 0x00ff00)
        GUICtrlSetState(-1, $GUI_DISABLE)

GUISetState()

GUICreate("", 500, 300, 50, 50, $WS_CHILD+$WS_BORDER, "", $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:05:20 | 显示全部楼层
不知道我这么理解对不对?
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUICoordMode", 1)
$GUI = GUICreate("函数演示", 600, 400) ; 创建居中显示的对话框窗口
GUICtrlCreateLabel(@CRLF & "  这个绿色矩形是父窗口上的控件", 0, 200, 600, 100)
GUICtrlSetBkColor(-1, 0x00ff00)
GUICtrlSetState(-1, $GUI_DISABLE)

GUISetState()

GUICreate("", 500, 300, 50, 50, BitOR($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:21:06 | 显示全部楼层
回复 2# haijie1223

是要这样的效果,但是,我上面也提到了,用 $WS_POPUP 样式话,当分辨率改变时,子窗口会位移。你可以尝试下,将屏幕分辨率改变,就看到效果了
我另开了一帖问这个问题:
http://www.autoitx.com/thread-31598-1-1.html
发表于 2012-4-13 00:42:16 | 显示全部楼层
回复 3# yhxhappy


    不好意思 我理解错了。
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$GUI = GUICreate("函数演示", 600, 400) ; 创建居中显示的对话框窗口
GUICtrlCreateLabel(@CRLF & "  这个绿色矩形是父窗口上的控件", 0, 200, 600, 100)
GUICtrlSetBkColor(-1, 0x00ff00)
GUICtrlSetState(-1, $GUI_DISABLE)

GUISetState()

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

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

评分

参与人数 2金钱 +50 收起 理由
anythinging + 30 神马都是浮云
afan + 20

查看全部评分

 楼主| 发表于 2012-4-13 10:54:19 | 显示全部楼层
回复 4# haijie1223


    感谢haijie1223的回复。如果没更简单的方法(如添加一些样式)解决的话,就按你这个思路来
发表于 2016-5-8 17:49:57 | 显示全部楼层
留個腳印 macgyver
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 03:30 , Processed in 0.086754 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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