//定义控件类

/*
1、拖一个 custom 控件到窗口上。
2、把 custom 控件的类名改为你创建的控件类名，例如 "myCtrl"
3、将窗口编辑器切换到代码模式，并在创建窗口前添加 import win.ui.ctrl.myCtrl 导入该控件。
4、在用户库中 win.ui.ctrl 右键新建窗口类库，例如 win.ui.ctrl.myCtrl
*/

//图文教程: https://mp.weixin.qq.com/s/s95LlTis3lrVeD8EYNZD0w
//这里直接定义控件类，实际使用建议写到用户库里
import win.ui;
class win.ui.ctrl.myCtrl{
	ctor( parent,tParam ){
		/*
		parent 参数为父窗口
		tParam 参数为创建控件的所有参数
		*/
		this = ..win._form(border="none";exmode="none";mode="child";parent=parent;left=tParam.left;top=tParam.top;right=tParam.right;bottom=tParam.bottom;tParam=tParam)
		this.add(
			edit2={cls="edit";text="win.ui.ctrl.myCtrl 控件里的文本框";left=45;top=36;right=294;bottom=127;edge=1;multiline=1;z=1}
		)	
		
		/*
		控件类只要在 this.hwnd 里存在有效的窗口句柄就表示创建子窗口成功。
		win.form 创建成功会将句柄保存在 this.hwnd 中。
		
		如果控件类构造函数返回的对象不存在 this.hwnd ，
		那么 aardio 会使用 tParam.cls 的类名创建控件，所以也可以在这里指定有效的控件类名，
		例如 win.ui.ctrl.listview 的构造函数里就是这样写：
		tParam.cls = "SysListView32"; 
		注意这里无论怎样修改 tParam.cls，控件创建成功后都会改回上面参数传入的原始 tParam.cls 的值。
		*/
	};
}
/*DSG{{*/
var winform = win.form(text="使用 custom 控件加载自定义控件类";right=759;bottom=469)
winform.add(
custom={cls="myCtrl";text="自定义控件";left=43;top=54;right=696;bottom=386;z=1}
)
/*}}*/

winform.show();

//这时候 winform.custom 就是 win.ui.ctrl.myCtrl 的实例对象.
winform.msgbox( winform.custom.edit2.text );
/*
不需要用 import 语句导入标准库 win.ui.ctrl 名字空间下的自带控件，
aardio 会按需导入这些标准库控件，但是如果是自己添加的自定义控件就要提前导入。
如果将 win.ui.ctrl.myCtrl 写到外部类库里，那就一定要用 import win.ui.ctrl.myCtrl 提前导入该控件类。
*/

win.loopMessage();