yhxhappy 发表于 2012-4-12 23:48:46

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

本帖最后由 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

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

yhxhappy 发表于 2012-4-13 00:21:06

回复 2# haijie1223

是要这样的效果,但是,我上面也提到了,用 $WS_POPUP 样式话,当分辨率改变时,子窗口会位移。你可以尝试下,将屏幕分辨率改变,就看到效果了
我另开了一帖问这个问题:
http://www.autoitx.com/thread-31598-1-1.html

haijie1223 发表于 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 + 50, $pos + 50)
EndFunc   ;==>WM_MOVE

yhxhappy 发表于 2012-4-13 10:54:19

回复 4# haijie1223


    感谢haijie1223的回复。如果没更简单的方法(如添加一些样式)解决的话,就按你这个思路来

kk_lee69 发表于 2016-5-8 17:49:57

留個腳印 macgyver
页: [1]
查看完整版本: [已解决] 父窗口控件遮住 $WS_CHILD 样式的子窗口,如何避免?