//窗口程序 - 控件重叠 //Z序原理与优化: doc://library-guide/std/win/ui/z-order.html import win.ui; /*DSG{{*/ var winform = win.form(text="控件重叠 - 请拖动窗口改变大小试试";right=584;bottom=509) winform.add( bk={cls="bk";text="这是 bk 背景贴图控件,可以随意重叠";left=19;top=313;right=557;bottom=484;bgcolor=32768;color=16777215;db=1;dl=1;dr=1;valign="bottom";z=2}; bk2={cls="bk";left=19;top=472;right=557;bottom=491;bgcolor=32768;db=1;dl=1;dr=1;z=1}; btnChild={cls="button";text="此控件不会被 edit 控件挡住或者干扰";left=202;top=377;right=524;bottom=448;db=1;dr=1;z=6}; btnClipSiblings={cls="button";text="此控件在后面,但反而穿透显示在前面了";left=244;top=179;right=566;bottom=250;db=1;dr=1;z=4}; editClipSiblings={cls="edit";text="此 edit 控件【重叠裁剪】属性为 true";left=19;top=146;right=521;bottom=261;clip=1;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;z=5}; editParent={cls="edit";text="此 edit 控件已设为下面 button 控件的父窗口";left=37;top=323;right=539;bottom=458;db=1;dl=1;dr=1;edge=1;multiline=1;z=3}; lbClipSiblings={cls="static";text='动态控件默认是不能前后重叠的。\r\n只有 bk,bkplus 这种无窗口背景贴图控件可以任意重叠。\r\n或者 static,plus 设为静态模式(不响应事件回调,notify 属性为false)可以重叠。\r\n\r\n有两种方法让动态控件可以前后叠放。\r\n\r\n1、把被遮挡的控件放在后面,前面的控件设置『重叠裁剪』为 true。\r\n这时候前面的控件就会挖个洞不再挡住后面的控件,显示顺序会反过来。';left=19;top=12;right=513;bottom=141;dl=1;dr=1;dt=1;transparent=1;z=7}; lbSetParent={cls="static";text='2、前面的控件设置背景控件为父窗口,例如:\r\nwinform.btnChild.setParent( winform.editParent );';left=19;top=274;right=513;bottom=317;db=1;dl=1;dr=1;transparent=1;z=8} ) /*}}*/ //设置父窗口 winform.btnChild.setParent( winform.editParent ); //分发子窗口命令消息 winform.editParent.translateCommand() /* 响应命令。 _WM_COMMAND 是由控件发送给父窗口, 父窗口解析此消息才能调用控件的 oncommand 函数。 父窗口必须调用 translateCommand() 函数, */ winform.btnChild.oncommand = function(id,event){ winform.msgbox("测试","控件重叠测试"); } import win.ui.minmax; win.ui.minmax(winform); winform.show(); win.loopMessage();