[已解决] 父窗口控件遮住 $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 不知道我这么理解对不对?
#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 回复 2# haijie1223
是要这样的效果,但是,我上面也提到了,用 $WS_POPUP 样式话,当分辨率改变时,子窗口会位移。你可以尝试下,将屏幕分辨率改变,就看到效果了
我另开了一帖问这个问题:
http://www.autoitx.com/thread-31598-1-1.html 回复 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 回复 4# haijie1223
感谢haijie1223的回复。如果没更简单的方法(如添加一些样式)解决的话,就按你这个思路来 留個腳印 macgyver
页:
[1]