# aardio 范例: 按钮中嵌按钮



```aardio
//控件嵌控件
// plus 复合控件: https://www.aardio.com/zh-cn/docs/examples/Text/english/fancy-text.html
import win.ui;
import win.ui.menu;
/*DSG{{*/
var winform = win.form(text="按钮中嵌按钮";right=599;bottom=399)
winform.add(
btnInner={cls="button";text="4";left=183;top=47;right=209;bottom=77;anchors={top=1;right=1};font=LOGFONT(charset=2;name='Marlett';weight=500);z=2};
button={cls="button";text="按钮中按钮";left=53;top=43;right=213;bottom=83;anchors={top=1;right=1};z=1};
button2={cls="button";text="按钮中按钮";left=53;top=187;right=213;bottom=227;anchors={top=1;right=1};z=3}
)
/*}}*/

/*
winform.btnInner 与 winform.button 必须设置相同的固定边距属性，
以保持在缩放时移动到相同位置
*/

//设置父窗口
winform.btnInner.setParent( winform.button )

//允许父窗口转发子窗口的命令（_WM_COMMAND）与通知（_WM_NOTIFY）消息
winform.button.translateCommand();

/*
响应命令。
_WM_COMMAND 是由控件发送给父窗口，
父窗口解析此消息才能调用控件的 oncommand 函数。
父窗口必须调用 translateCommand() 函数，
*/
winform.btnInner.oncommand = function(id,event){
	//按下鼠标右键,下面获取按钮屏幕坐标
	var rc = winform.btnInner.getRect(true/*使用屏幕坐标*/)
	
	//创建弹出菜单
	win.ui.popmenu(winform).addTable( {
    	{ 
        	"测试";
        	function(id){
        		winform.msgbox("测试")
        	} 
    	}; {
        	"退出程序";
        	function(id){
            	winform.close()
        	} 
    	};
	} ).popup(rc.left,rc.bottom,true/*使用屏幕坐标*/)	
}

//更简单的方法是调用 addCtrl 函数直接在按钮内部添加控件，一句代码代码上面所有步骤。
var innerButton = winform.button2.addCtrl(
	cls="button";marginRight=2;marginTop=1;marginBottom=4;width=16;text="4";font=LOGFONT(charset=2;name='Marlett';weight=500);
	oncommand = function(id,event){ 
		owner.msgbox(owner.text)
	}
)

winform.show()
win.loopMessage();
```

