xzf680 发表于 2020-6-6 14:55:37

如何让子窗口移出父窗口多少就隐藏多少界面

本帖最后由 xzf680 于 2020-6-7 14:48 编辑

点击上移子窗口,当子窗口超出父窗口的部份或整个子窗口如何隐藏,简单的说就是不想看到超出父窗口的子窗口部份界面,子窗口不能在父窗口控件下,移动超出的界面隐藏,没超出的还是看得到这意思。


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

$GUI = GUICreate("函数演示", 600, 400, -1, -1) ; 创建居中显示的对话框窗口
GUICtrlCreateLabel(@LF & "这个绿色矩形是父窗口上的控件,子窗口不能在父窗口控件底下", 0, 200, 600, 100)
GUICtrlSetBkColor(-1, 0x00ff00)
GUICtrlSetState(-1, $GUI_DISABLE)
$but = GUICtrlCreateButton("上移子窗口", 20, 100, 80,20)
GUISetState()

$form=GUICreate("", 400, 300, 130, 50, $ws_popup, $ws_ex_mdichild, $GUI) ;子窗口
GUISetBkColor(0xffff00)
GUICtrlCreateLabel("点击上移子窗口,当子窗口超出父窗口的部份或整个子窗口如何隐藏,简单的说就不是不想看到超出父窗口的子窗口部份", 40, 100, 320, 50)

GUISetState()


; 运行 GUI,直到对话框窗口关闭
While 1
      $msg = GUIGetMsg()
      Switch $msg
            Case $GUI_EVENT_CLOSE
                  Exit
                Case $but
                        GUI_MOVE()
      EndSwitch
WEnd

Func GUI_MOVE()
      Local $pos = WinGetPos($form)
      WinMove($form, "", $pos , $pos -20)
EndFunc   ;==>GUI_MOVE

水木子 发表于 2020-6-6 16:56:21

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

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

Global $iY = 50
$form = GUICreate("", 400, 300, 130, 50, $WS_CHILD, -1, $GUI) ;子窗口
GUISetBkColor(0xffff00)
GUICtrlCreateLabel("点击上移子窗口,当子窗口超出父窗口的部份或整个子窗口如何隐藏,简单的说就不是不想看到超出父窗口的子窗口部份", 40, 100, 320, 50)

GUISetState()
;~ WM_MOVE()
;~ GUIRegisterMsg($WM_MOVE, "WM_MOVE")

; 运行 GUI,直到对话框窗口关闭
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $but
                        WM_MOVE()
        EndSwitch
WEnd

Func WM_MOVE()
        $iY -= 20
        WinMove($form, "", Default, $iY)
EndFunc   ;==>WM_MOVE

afan 发表于 2020-6-6 18:26:45

水木子 发表于 2020-6-6 16:56


看他的示例,一定会回复你:子窗口不能被父窗口的控件挡住… {:face (355):}

水木子 发表于 2020-6-6 18:32:54

afan 发表于 2020-6-6 18:26
看他的示例,一定会回复你:子窗口不能被父窗口的控件挡住…

前辈英明,我可能真的没有明白他的意图。献丑啦!

afan 发表于 2020-6-6 18:38:05

水木子 发表于 2020-6-6 18:32
前辈英明,我可能真的没有明白他的意图。献丑啦!

nonono,也可能是我想多了~~他这有点浮动广告的即视感…

xzf680 发表于 2020-6-6 19:27:22

辛苦了水木子大神,正如A版说的子窗口不能被父窗口的控件挡住。

yuantian 发表于 2020-6-6 19:35:39

本帖最后由 yuantian 于 2020-6-6 19:38 编辑

xzf680 发表于 2020-6-6 19:27
辛苦了水木子大神,正如A版说的子窗口不能被父窗口的控件挡住。
我猜你是这个意思。。。@水木子,@afan
不过很可惜,我不会写。。。
:face (2):














xzf680 发表于 2020-6-6 19:37:36

yuantian 发表于 2020-6-6 19:35
我猜你是这个意思。。。@水木子,@afan
不过很可惜,我不会写。。。



是的没错,是这意思:face (37):

yuantian 发表于 2020-6-6 19:39:33

xzf680 发表于 2020-6-6 19:37
是的没错,是这意思

:face (32):
很可惜啊,这个界面的确很迷,
我的确不知道。。不知道楼上两位大大有没有啥好的思路。。

haijie1223 发表于 2020-6-7 00:20:37

#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Opt("GUIOnEventMode", 1)
Local $Parent = GUICreate("父窗口", 800, 600, -1, -1) ;父窗口
GUISetOnEvent(-3, '_Exit1')
Local $Child = GUICreate("子窗口", 400, 300, 0, 0) ;子窗口
GUISetOnEvent(-3, '_Exit2')
_WinAPI_SetParent($Child, $Parent)
GUISetState(@SW_SHOW, $Parent)
GUISetState(@SW_SHOW, $Child)
While 1
        Sleep(10)
WEnd
Func _Exit1()
        Exit
EndFunc   ;==>_Exit1
Func _Exit2()
        GUISetState(@SW_HIDE, $Child)
        _WinAPI_SetParent($Child, 0)
EndFunc   ;==>_Exit2

afan 发表于 2020-6-7 00:23:28

haijie1223 发表于 2020-6-7 00:20


看他的示例,一定会回复你:加上控件试试 {:face (355):}

xzf680 发表于 2020-6-7 14:42:29

haijie1223 发表于 2020-6-7 00:20


感谢发哥也感谢楼上各位,问题还是没解决,子窗口在父窗口控件下不行,A版理解是对的,期待问题的解决。

afan 发表于 2020-6-7 14:45:55

注册 WM_GETMINMAXINFO 消息,消息内部处理子窗口坐标大小

xzf680 发表于 2020-6-7 15:25:02

afan 发表于 2020-6-7 14:45
注册 WM_GETMINMAXINFO 消息,消息内部处理子窗口坐标大小

期待A大出手,另外_WinAPI_CreateWindowEx这个不知道能否解决,帮助也没看明白,没案例

haijie1223 发表于 2020-6-7 15:33:58

afan 发表于 2020-6-7 00:23
看他的示例,一定会回复你:加上控件试试

看样子,楼主还不善于自己动脑。
页: [1] 2
查看完整版本: 如何让子窗口移出父窗口多少就隐藏多少界面