# win.ui.menu 库模块帮助文档

## win.ui.menu 成员列表 <a id="win.ui.menu" href="#win.ui.menu">&#x23;</a>

菜单支持库

创建窗口菜单  
需要先调用 `import win.ui.menu`，不然发布后会报错。  
开发环境下运行，为了加快启动速度，不会百分百排除所有没有引用的库

### win.ui.menu._handle2menu <a id="win.ui.menu._handle2menu" href="#win.ui.menu._handle2menu">&#x23;</a>
句柄到菜单对象映射表

### win.ui.menu.findByHandle() <a id="win.ui.menu.findByHandle" href="#win.ui.menu.findByHandle">&#x23;</a>
[返回对象:menuObject](#menuObject)

### win.ui.menu.findByHandle(菜单句柄) <a id="win.ui.menu.findByHandle" href="#win.ui.menu.findByHandle">&#x23;</a>
查找菜单对象

## win.ui.menu 事件列表 <a id="win.ui.menuEvent" href="#win.ui.menuEvent">&#x23;</a>

### win.ui.menu.onDrawItem <a id="win.ui.menu.onDrawItem" href="#win.ui.menu.onDrawItem">&#x23;</a>

```aardio
win.ui.menu.onDrawItem = function(drawItem,dpiScaleX,dpiScaleY){

	return 1; 
}
```

### win.ui.menu.onMeasureItem <a id="win.ui.menu.onMeasureItem" href="#win.ui.menu.onMeasureItem">&#x23;</a>

```aardio
win.ui.menu.onMeasureItem = function(measureItem,dpiScaleX,dpiScaleY){ 
	measureItem.itemWidth = 80;  
	measureItem.itemHeight = ::GetSystemMetrics(0xF/*_SM_CYMENU*/);
}
```

## menuObject 成员列表 <a id="menuObject" href="#menuObject">&#x23;</a>

### menuObject.add <a id="menuObject.add" href="#menuObject.add">&#x23;</a>
添加菜单项。

### menuObject.add() <a id="menuObject.add" href="#menuObject.add">&#x23;</a>
添加分隔线

### menuObject.add(menuTable) <a id="menuObject.add" href="#menuObject.add">&#x23;</a>

```aardio
menuObject.add(  
	text = "标题";  
	bitmap = "位图句柄或路径、或图像数据,可选参数";  
	bitmapCheckd = "选中位图句柄或路径、或图像数据,可选参数";  
	proc = function(id){  
		/*点击菜单项的回调函数，  
注意添加菜单项以后 add 函数返回菜单命令ID*/  
	};  
	id = 可选参数;  
	flag = 可选参数;  
);
```

### menuObject.add(title,callback,flags,commandId) <a id="menuObject.add" href="#menuObject.add">&#x23;</a>

```aardio
menuObject.add("菜单标题",function(){  
	/*指定点击菜单项的回调函数。  
参数 @flags 可选用 _MF_ 前缀的常量自定义选项。  
可选用 @commandId 参数自定义命令 ID，不指定则自动注册空闲命令 ID。  
添加菜单项以后 add 方法返回注册的菜单项命令 ID*/  

})
```

### menuObject.add(title,commandId) <a id="menuObject.add" href="#menuObject.add">&#x23;</a>
添加菜单项。  
参数 @title 指定菜单项文本。  
参数 @commandId 指定绑定的命令 ID，不会触发默认回调函数 onMenuItemClick 。

### menuObject.add(title,subMenu) <a id="menuObject.add" href="#menuObject.add">&#x23;</a>
添加 @subMenu 参数指定的子菜单。  
@title 参数指定菜单项文本。  
返回添加的子菜单

### menuObject.addSeparator() <a id="menuObject.addSeparator" href="#menuObject.addSeparator">&#x23;</a>
添加分隔线，等价于调用 addSeparator 方法。

### menuObject.addTable <a id="menuObject.addTable" href="#menuObject.addTable">&#x23;</a>

```aardio
menuObject.addTable( {  
	{ "菜单文本";  function(id){  
		/*菜单事件回调函数*/  
	} }; { /*分隔线*/ }  
	{ "退出程序"; function(id){    
		winform.close()   
 	} };  
} )
```

### menuObject.check <a id="menuObject.check" href="#menuObject.check">&#x23;</a>
勾选或取消勾选菜单项

### menuObject.check(菜单项命令ID,是否选中,0/*_MF_BYCOMMAND*/) <a id="menuObject.check" href="#menuObject.check">&#x23;</a>
勾选或取消勾选菜单项，参数@2默认为 true，  
如果参数@3为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### menuObject.check(菜单项序号,是否选中) <a id="menuObject.check" href="#menuObject.check">&#x23;</a>
勾选或取消勾选菜单项，参数@2默认为 true

### menuObject.checked <a id="menuObject.checked" href="#menuObject.checked">&#x23;</a>
返回菜单项是否选中状态

### menuObject.checked(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="menuObject.checked" href="#menuObject.checked">&#x23;</a>
返回菜单项是否选中状态e，  
如果参数@2为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### menuObject.checked(菜单项序号) <a id="menuObject.checked" href="#menuObject.checked">&#x23;</a>
返回菜单项是否选中状态

### menuObject.click(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="menuObject.click" href="#menuObject.click">&#x23;</a>
模拟点击指定命令ID的菜单项

### menuObject.click(菜单项序号) <a id="menuObject.click" href="#menuObject.click">&#x23;</a>
模拟点击指定位置菜单项

### menuObject.close() <a id="menuObject.close" href="#menuObject.close">&#x23;</a>
关闭菜单

### menuObject.count() <a id="menuObject.count" href="#menuObject.count">&#x23;</a>
返回菜单子项数目

### menuObject.delete <a id="menuObject.delete" href="#menuObject.delete">&#x23;</a>
删除指定位置菜单项

### menuObject.delete(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="menuObject.delete" href="#menuObject.delete">&#x23;</a>
移除指定命令ID的菜单项  
被移除的如果是子菜单则销毁,不可重用

### menuObject.delete(菜单项序号) <a id="menuObject.delete" href="#menuObject.delete">&#x23;</a>
删除指定位置菜单项  
被移除的如果是子菜单则销毁,不可重用

### menuObject.enable <a id="menuObject.enable" href="#menuObject.enable">&#x23;</a>
启用或禁用菜单项

### menuObject.enable(菜单项命令ID,是否启用,0/*_MF_BYCOMMAND*/) <a id="menuObject.enable" href="#menuObject.enable">&#x23;</a>
启用或禁用菜单项，参数@2默认为 true，  
如果参数@3为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### menuObject.enable(菜单项序号,是否启用) <a id="menuObject.enable" href="#menuObject.enable">&#x23;</a>
启用或禁用菜单项，参数@2默认为 true

### menuObject.getId <a id="menuObject.getId" href="#menuObject.getId">&#x23;</a>
根据指定位置序号返回菜单项的命令ID

### menuObject.getId(菜单项序号) <a id="menuObject.getId" href="#menuObject.getId">&#x23;</a>
根据指定位置序号返回菜单项的命令ID

### menuObject.getPos <a id="menuObject.getPos" href="#menuObject.getPos">&#x23;</a>
根据菜单项的命令ID返回菜单位置序号

### menuObject.getPos(菜单项命令I) <a id="menuObject.getPos" href="#menuObject.getPos">&#x23;</a>
根据菜单项的命令ID返回菜单位置序号

### menuObject.getString <a id="menuObject.getString" href="#menuObject.getString">&#x23;</a>
返回菜单项文本

### menuObject.getString(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="menuObject.getString" href="#menuObject.getString">&#x23;</a>
返回菜单项文本，  
如果参数@2为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### menuObject.getString(菜单项序号) <a id="menuObject.getString" href="#menuObject.getString">&#x23;</a>
返回菜单项文本

### menuObject.handle <a id="menuObject.handle" href="#menuObject.handle">&#x23;</a>
菜单句柄

### menuObject.insert <a id="menuObject.insert" href="#menuObject.insert">&#x23;</a>
在指定位置插入菜单项。

### menuObject.insert(menuTable) <a id="menuObject.insert" href="#menuObject.insert">&#x23;</a>

```aardio
menuObject.insert(  
	position = 1;  
	text = "标题";  
	bitmap = "位图句柄或路径、或图像数据,可选参数";  
	bitmapCheckd = "选中位图句柄或路径、或图像数据,可选参数";  
	proc = function(id){  
		/*点击菜单项的回调函数，  
注意添加菜单项以后 add 函数返回菜单命令ID*/  
	};  
	id = 可选参数;  
	flag = 可选参数;  
);
```

### menuObject.insert(position) <a id="menuObject.insert" href="#menuObject.insert">&#x23;</a>
在指定位置插入分隔线。  
@position 用数值指定位置序号。

### menuObject.insert(position,title,callback,flags,commandId) <a id="menuObject.insert" href="#menuObject.insert">&#x23;</a>

```aardio
menuObject.insert(1,"菜单标题",function(){  
	/*指定点击菜单项的回调函数。  
参数 @flags 可选用 _MF_ 前缀的常量自定义选项。  
可选用 @commandId 参数自定义命令 ID，不指定则自动注册空闲命令 ID。  
添加菜单项以后 add 方法返回注册的菜单项命令 ID*/  

})
```

### menuObject.insert(position,title,commandId) <a id="menuObject.insert" href="#menuObject.insert">&#x23;</a>
在指定位置插入菜单项。  
参数 @position 用数值指定位置序号。  
参数 @title 指定菜单项文本。  
参数 @commandId 指定绑定的命令 ID，不会触发默认回调函数 onMenuItemClick 。

### menuObject.insert(position,title,subMenu) <a id="menuObject.insert" href="#menuObject.insert">&#x23;</a>
在指定位置插入 @subMenu 参数指定的子菜单。  
@title 参数指定菜单项文本。  
返回添加的子菜单

### menuObject.ownerDraw <a id="menuObject.ownerDraw" href="#menuObject.ownerDraw">&#x23;</a>
启用自绘  
系统菜单自绘没多大意义,建议使用弹出窗口模拟菜单即可

### menuObject.redraw() <a id="menuObject.redraw" href="#menuObject.redraw">&#x23;</a>
重绘菜单

### menuObject.remove <a id="menuObject.remove" href="#menuObject.remove">&#x23;</a>
移除指定位置菜单项

### menuObject.remove(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="menuObject.remove" href="#menuObject.remove">&#x23;</a>
移除指定命令ID的菜单项  
被移除的如果是子菜单并不销毁,可重用

### menuObject.remove(菜单项序号) <a id="menuObject.remove" href="#menuObject.remove">&#x23;</a>
移除指定位置菜单项  
被移除的如果是子菜单并不销毁,可重用

### menuObject.reset <a id="menuObject.reset" href="#menuObject.reset">&#x23;</a>
重设菜单回调函数

### menuObject.reset(新的回调函数,菜单ID,0/*_MF_BYCOMMAND*/) <a id="menuObject.reset" href="#menuObject.reset">&#x23;</a>
重设菜单回调函数

### menuObject.reset(新的回调函数,菜单位置) <a id="menuObject.reset" href="#menuObject.reset">&#x23;</a>
重设菜单回调函数

### menuObject.selId <a id="menuObject.selId" href="#menuObject.selId">&#x23;</a>
获取或修改当前选中项命令ID,单选模式

### menuObject.selIndex <a id="menuObject.selIndex" href="#menuObject.selIndex">&#x23;</a>
获取或修改当前选中项索引,单选模式

### menuObject.selText <a id="menuObject.selText" href="#menuObject.selText">&#x23;</a>
获取或修改当前选中项文本,单选模式

### menuObject.setBitmap <a id="menuObject.setBitmap" href="#menuObject.setBitmap">&#x23;</a>
设置菜单项位图

### menuObject.setBitmap(菜单项命令ID,位图,选中位图,0/*_MF_BYCOMMAND*/) <a id="menuObject.setBitmap" href="#menuObject.setBitmap">&#x23;</a>
设置菜单项位图,  
选中位图为可选参数,  
图像可以是句柄指针,也可以是图像文件路径或数据，  
如果参数@4为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### menuObject.setBitmap(菜单项序号,位图,选中位图) <a id="menuObject.setBitmap" href="#menuObject.setBitmap">&#x23;</a>
设置菜单项位图,  
选中位图为可选参数,  
图像可以是句柄指针,也可以是图像文件路径或数据

### menuObject.setString <a id="menuObject.setString" href="#menuObject.setString">&#x23;</a>
设置菜单项文本

### menuObject.setString(菜单项命令ID,字符串,0/*_MF_BYCOMMAND*/) <a id="menuObject.setString" href="#menuObject.setString">&#x23;</a>
设置菜单项文本，  
如果参数@3为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### menuObject.setString(菜单项序号,字符串) <a id="menuObject.setString" href="#menuObject.setString">&#x23;</a>
设置菜单项文本

### menuObject.subMenu() <a id="menuObject.subMenu" href="#menuObject.subMenu">&#x23;</a>
[返回对象:popmenuObject](#popmenuObject)

### menuObject.subMenu(1) <a id="menuObject.subMenu" href="#menuObject.subMenu">&#x23;</a>
返回指定位置子菜单

## menuObject 事件列表 <a id="menuObjectEvent" href="#menuObjectEvent">&#x23;</a>

### menuObject.onMenuItemClick <a id="menuObject.onMenuItemClick" href="#menuObject.onMenuItemClick">&#x23;</a>

```aardio
menuObject.onMenuItemClick = function(id){
	/*默认的菜单回调函数。  
如果添加菜单项时，回调函数指定为 null 则默认调用此函数。  
如果回调函数指定为命令 ID 则不触发此默认回调。*/
}
```

## popmenuObject 成员列表 <a id="popmenuObject" href="#popmenuObject">&#x23;</a>

### popmenuObject.add <a id="popmenuObject.add" href="#popmenuObject.add">&#x23;</a>
添加菜单项。

### popmenuObject.add() <a id="popmenuObject.add" href="#popmenuObject.add">&#x23;</a>
添加分隔线，等价于调用 addSeparator 方法。

### popmenuObject.add(menuTable) <a id="popmenuObject.add" href="#popmenuObject.add">&#x23;</a>

```aardio
popmenuObject.add(  
	text = "标题";  
	bitmap = "位图句柄或路径、或图像数据,可选参数";  
	bitmapCheckd = "选中位图句柄或路径、或图像数据,可选参数";  
	proc = function(id){  
		/*点击菜单项的回调函数，  
注意添加菜单项以后 add 函数返回菜单命令ID*/  
	};  
	id = 可选参数;  
	flag = 可选参数;  
);
```

### popmenuObject.add(title,callback,flags,commandId) <a id="popmenuObject.add" href="#popmenuObject.add">&#x23;</a>

```aardio
popmenuObject.add("菜单标题",function(){  
	/*指定点击菜单项的回调函数。  
参数 @flags 可选用 _MF_ 前缀的常量自定义选项。  
可选用 @commandId 参数自定义命令 ID，不指定则自动注册空闲命令 ID。  
添加菜单项以后 add 方法返回注册的菜单项命令 ID*/  

})
```

### popmenuObject.add(title,commandId) <a id="popmenuObject.add" href="#popmenuObject.add">&#x23;</a>
添加菜单项。  
参数 @title 指定菜单项文本。  
参数 @commandId 指定绑定的命令 ID，不会触发默认回调函数 onMenuItemClick 。  
可通过 popId 方法获取用户点选找菜单项 ID。

### popmenuObject.add(title,subMenu) <a id="popmenuObject.add" href="#popmenuObject.add">&#x23;</a>
添加 @subMenu 参数指定的子菜单。  
@title 参数指定菜单项文本。  
返回添加的子菜单

### popmenuObject.addSeparator() <a id="popmenuObject.addSeparator" href="#popmenuObject.addSeparator">&#x23;</a>
添加分隔线

### popmenuObject.addTable <a id="popmenuObject.addTable" href="#popmenuObject.addTable">&#x23;</a>

```aardio
popmenuObject.addTable( {  
	{ "菜单文本";  function(id){  
		/*菜单事件回调函数*/  
	} }; { /*分隔线*/ }  
	{ "退出程序"; function(id){    
		winform.close()   
 	} };  
} )
```

### popmenuObject.check <a id="popmenuObject.check" href="#popmenuObject.check">&#x23;</a>
勾选或取消勾选菜单项

### popmenuObject.check(菜单项命令ID,是否选中,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.check" href="#popmenuObject.check">&#x23;</a>
勾选或取消勾选菜单项，参数@2默认为 true，  
如果参数@3为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### popmenuObject.check(菜单项序号,是否选中) <a id="popmenuObject.check" href="#popmenuObject.check">&#x23;</a>
勾选或取消勾选菜单项，参数@2默认为 true

### popmenuObject.checked <a id="popmenuObject.checked" href="#popmenuObject.checked">&#x23;</a>
返回菜单项是否选中状态

### popmenuObject.checked(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.checked" href="#popmenuObject.checked">&#x23;</a>
返回菜单项是否选中状态e，  
如果参数@2为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### popmenuObject.checked(菜单项序号) <a id="popmenuObject.checked" href="#popmenuObject.checked">&#x23;</a>
返回菜单项是否选中状态

### popmenuObject.click(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.click" href="#popmenuObject.click">&#x23;</a>
模拟点击指定命令ID的菜单项

### popmenuObject.click(菜单项序号) <a id="popmenuObject.click" href="#popmenuObject.click">&#x23;</a>
模拟点击指定位置菜单项

### popmenuObject.close() <a id="popmenuObject.close" href="#popmenuObject.close">&#x23;</a>
关闭菜单

### popmenuObject.count() <a id="popmenuObject.count" href="#popmenuObject.count">&#x23;</a>
返回菜单子项数目

### popmenuObject.delete <a id="popmenuObject.delete" href="#popmenuObject.delete">&#x23;</a>
删除指定位置菜单项

### popmenuObject.delete(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.delete" href="#popmenuObject.delete">&#x23;</a>
移除指定命令ID的菜单项  
被移除的如果是子菜单则销毁,不可重用

### popmenuObject.delete(菜单项序号) <a id="popmenuObject.delete" href="#popmenuObject.delete">&#x23;</a>
删除指定位置菜单项  
被移除的如果是子菜单则销毁,不可重用

### popmenuObject.enable <a id="popmenuObject.enable" href="#popmenuObject.enable">&#x23;</a>
启用或禁用菜单项

### popmenuObject.enable(菜单项命令ID,是否启用,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.enable" href="#popmenuObject.enable">&#x23;</a>
启用或禁用菜单项，参数@2默认为 true，  
如果参数@3为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### popmenuObject.enable(菜单项序号,是否启用) <a id="popmenuObject.enable" href="#popmenuObject.enable">&#x23;</a>
启用或禁用菜单项，参数@2默认为 true

### popmenuObject.fireId(commandId,hwnd) <a id="popmenuObject.fireId" href="#popmenuObject.fireId">&#x23;</a>
调用 @commandId 指定的菜单项命令 ID 绑定的回调函数。  
可选指定接收命令的父窗体句柄。  
可添加任意个附加参数（转发给菜单项回调函数）。

### popmenuObject.getId <a id="popmenuObject.getId" href="#popmenuObject.getId">&#x23;</a>
根据指定位置序号返回菜单项的命令ID

### popmenuObject.getId(菜单项序号) <a id="popmenuObject.getId" href="#popmenuObject.getId">&#x23;</a>
根据指定位置序号返回菜单项的命令ID

### popmenuObject.getPos <a id="popmenuObject.getPos" href="#popmenuObject.getPos">&#x23;</a>
根据菜单项的命令ID返回菜单位置序号

### popmenuObject.getPos(菜单项命令I) <a id="popmenuObject.getPos" href="#popmenuObject.getPos">&#x23;</a>
根据菜单项的命令ID返回菜单位置序号

### popmenuObject.getString <a id="popmenuObject.getString" href="#popmenuObject.getString">&#x23;</a>
返回菜单项文本

### popmenuObject.getString(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.getString" href="#popmenuObject.getString">&#x23;</a>
返回菜单项文本，  
如果参数@2为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### popmenuObject.getString(菜单项序号) <a id="popmenuObject.getString" href="#popmenuObject.getString">&#x23;</a>
返回菜单项文本

### popmenuObject.handle <a id="popmenuObject.handle" href="#popmenuObject.handle">&#x23;</a>
菜单句柄

### popmenuObject.insert <a id="popmenuObject.insert" href="#popmenuObject.insert">&#x23;</a>
在指定位置插入菜单项。

### popmenuObject.insert(menuTable) <a id="popmenuObject.insert" href="#popmenuObject.insert">&#x23;</a>

```aardio
popmenuObject.insert(  
	position = 1;  
	text = "标题";  
	bitmap = "位图句柄或路径、或图像数据,可选参数";  
	bitmapCheckd = "选中位图句柄或路径、或图像数据,可选参数";  
	proc = function(id){  
		/*点击菜单项的回调函数，  
注意添加菜单项以后 add 函数返回菜单命令ID*/  
	};  
	id = 可选参数;  
	flag = 可选参数;  
);
```

### popmenuObject.insert(position) <a id="popmenuObject.insert" href="#popmenuObject.insert">&#x23;</a>
在指定位置插入分隔线。  
@position 用数值指定位置序号。

### popmenuObject.insert(position,title,callback,flags,commandId) <a id="popmenuObject.insert" href="#popmenuObject.insert">&#x23;</a>

```aardio
popmenuObject.insert(1,"菜单标题",function(){  
	/*指定点击菜单项的回调函数。  
参数 @flags 可选用 _MF_ 前缀的常量自定义选项。  
可选用 @commandId 参数自定义命令 ID，不指定则自动注册空闲命令 ID。  
添加菜单项以后 add 方法返回注册的菜单项命令 ID*/  

})
```

### popmenuObject.insert(position,title,commandId) <a id="popmenuObject.insert" href="#popmenuObject.insert">&#x23;</a>
在指定位置插入菜单项。  
参数 @position 用数值指定位置序号。  
参数 @title 指定菜单项文本。  
参数 @commandId 指定绑定的命令 ID，不会触发默认回调函数 onMenuItemClick 。

### popmenuObject.insert(position,title,subMenu) <a id="popmenuObject.insert" href="#popmenuObject.insert">&#x23;</a>
在指定位置插入 @subMenu 参数指定的子菜单。  
@title 参数指定菜单项文本。  
返回添加的子菜单

### popmenuObject.ownerDraw <a id="popmenuObject.ownerDraw" href="#popmenuObject.ownerDraw">&#x23;</a>
启用自绘  
系统菜单自绘没多大意义,建议使用弹出窗口模拟菜单即可

### popmenuObject.popId <a id="popmenuObject.popId" href="#popmenuObject.popId">&#x23;</a>
弹出菜单并返回用户点选的菜单项命令 ID。  
此方法仅返回命令 ID，不会自动触发命令 ID 绑定的回调函数。  
可用返回值作为参数调用 fireId 方法触发相应的回调函数。

### popmenuObject.popId(point,relativeTo,flags) <a id="popmenuObject.popId" href="#popmenuObject.popId">&#x23;</a>
参数 @point 指定 `::POINT` 结构体（或 `::RECT` 结构体），不可省略。  
参数 @relativeTo 指定参数 @point 的参考点。  
如果为布尔值则指定是否为屏幕坐标，默认为 false。  
如果为控件对象则表示  @point 菜单父窗体内控件子窗口的坐标。  

可选用参数 @flags 指定 _TPM_ 前缀的选项,  
例如 _TPM_BOTTOMALIGN 指定坐标 y 指定菜单底部位置

### popmenuObject.popId(x,y,relativeTo,flags) <a id="popmenuObject.popId" href="#popmenuObject.popId">&#x23;</a>
如果不指定坐标,则自动获取鼠标当前位置。  
参数 @relativeTo 指定参数 @x,@y 的参考点。  
如果为布尔值则指定是否为屏幕坐标，默认为 false。  
如果为控件对象则表示  @x,@y 菜单父窗体内控件子窗口的坐标。  

一般不需要指定坐标参数，由函数自动设定即可。  
可选用参数 @flags 指定 _TPM_ 前缀的选项,  
例如 _TPM_BOTTOMALIGN 指定坐标 y 指定菜单底部位置

### popmenuObject.popup <a id="popmenuObject.popup" href="#popmenuObject.popup">&#x23;</a>
弹出菜单并自动触发菜单项绑定的回调函数。  
成功返回 true，失败返回 false。  

此函数不会返回触发菜单项绑定的命令 ID，  
改用 popId 方法可返回命令 ID 而不会自动触发回调。

### popmenuObject.popup(point,relativeTo,flags) <a id="popmenuObject.popup" href="#popmenuObject.popup">&#x23;</a>
弹出菜单。  
参数 @point 指定 `::POINT` 结构体（或 `::RECT` 结构体），不可省略。  
参数 @relativeTo 指定参数 @point 的参考点。  
如果为布尔值则指定是否为屏幕坐标，默认为 false。  
如果为控件对象则表示  @point 菜单父窗体内控件子窗口的坐标。  

可选用参数 @flags 指定 _TPM_ 前缀的选项,  
例如 _TPM_BOTTOMALIGN 指定坐标 y 指定菜单底部位置

### popmenuObject.popup(x,y,relativeTo,flags) <a id="popmenuObject.popup" href="#popmenuObject.popup">&#x23;</a>
弹出菜单。  
如果不指定坐标,则自动获取鼠标当前位置。  
参数 @relativeTo 指定参数 @x,@y 的参考点。  
如果为布尔值则指定是否为屏幕坐标，默认为 false。  
如果为控件对象则表示  @x,@y 菜单父窗体内控件子窗口的坐标。  

一般不需要指定坐标参数，由函数自动设定即可。  
可选用参数 @flags 指定 _TPM_ 前缀的选项,  
例如 _TPM_BOTTOMALIGN 指定坐标 y 指定菜单底部位置

### popmenuObject.remove <a id="popmenuObject.remove" href="#popmenuObject.remove">&#x23;</a>
移除指定位置菜单项

### popmenuObject.remove(菜单项命令ID,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.remove" href="#popmenuObject.remove">&#x23;</a>
移除指定命令ID的菜单项  
被移除的如果是子菜单并不销毁,可重用

### popmenuObject.remove(菜单项序号) <a id="popmenuObject.remove" href="#popmenuObject.remove">&#x23;</a>
移除指定位置菜单项  
被移除的如果是子菜单并不销毁,可重用

### popmenuObject.reset <a id="popmenuObject.reset" href="#popmenuObject.reset">&#x23;</a>
重设菜单回调函数

### popmenuObject.reset(新的回调函数,菜单ID,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.reset" href="#popmenuObject.reset">&#x23;</a>
重设菜单回调函数

### popmenuObject.reset(新的回调函数,菜单位置) <a id="popmenuObject.reset" href="#popmenuObject.reset">&#x23;</a>
重设菜单回调函数

### popmenuObject.selId <a id="popmenuObject.selId" href="#popmenuObject.selId">&#x23;</a>
获取或修改当前选中项命令ID,单选模式

### popmenuObject.selIndex <a id="popmenuObject.selIndex" href="#popmenuObject.selIndex">&#x23;</a>
获取或修改当前选中项索引,单选模式

### popmenuObject.selText <a id="popmenuObject.selText" href="#popmenuObject.selText">&#x23;</a>
获取或修改当前选中项文本,单选模式

### popmenuObject.setBitmap <a id="popmenuObject.setBitmap" href="#popmenuObject.setBitmap">&#x23;</a>
设置菜单项位图

### popmenuObject.setBitmap(菜单项命令ID,位图,选中位图,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.setBitmap" href="#popmenuObject.setBitmap">&#x23;</a>
设置菜单项位图,  
选中位图为可选参数,  
图像可以是句柄指针,也可以是图像文件路径或数据，  
如果参数 @4 为 `0/*_MF_BYCOMMAND*/` 则参数 @1 为菜单命令 ID

### popmenuObject.setBitmap(菜单项序号,位图,选中位图) <a id="popmenuObject.setBitmap" href="#popmenuObject.setBitmap">&#x23;</a>
设置菜单项位图,  
选中位图为可选参数,  
图像可以是句柄指针,也可以是图像文件路径或数据

### popmenuObject.setString <a id="popmenuObject.setString" href="#popmenuObject.setString">&#x23;</a>
设置菜单项文本

### popmenuObject.setString(菜单项命令ID,字符串,0/*_MF_BYCOMMAND*/) <a id="popmenuObject.setString" href="#popmenuObject.setString">&#x23;</a>
设置菜单项文本，  
如果参数@3为0/*_MF_BYCOMMAND*/则参数@1为菜单命令ID

### popmenuObject.setString(菜单项序号,字符串) <a id="popmenuObject.setString" href="#popmenuObject.setString">&#x23;</a>
设置菜单项文本

### popmenuObject.subMenu() <a id="popmenuObject.subMenu" href="#popmenuObject.subMenu">&#x23;</a>
[返回对象:popmenuObject](#popmenuObject)

### popmenuObject.subMenu(1) <a id="popmenuObject.subMenu" href="#popmenuObject.subMenu">&#x23;</a>
返回指定位置子菜单

## popmenuObject 事件列表 <a id="popmenuObjectEvent" href="#popmenuObjectEvent">&#x23;</a>

### popmenuObject.onMenuItemClick <a id="popmenuObject.onMenuItemClick" href="#popmenuObject.onMenuItemClick">&#x23;</a>

```aardio
popmenuObject.onMenuItemClick = function(id){
	/*默认的菜单回调函数。  
如果添加菜单项时，回调函数指定为 null 则默认调用此函数。  
如果回调函数指定为命令 ID 则不触发此默认回调。*/
}
```

## win.ui 成员列表 <a id="win.ui" href="#win.ui">&#x23;</a>

### win.ui.getMenu() <a id="win.ui.getMenu" href="#win.ui.getMenu">&#x23;</a>
[返回对象:menuObject](#menuObject)

### win.ui.getMenu(hwnd) <a id="win.ui.getMenu" href="#win.ui.getMenu">&#x23;</a>
返回窗口菜单  
参数@1可指定窗体对象或窗体句柄  
返回的菜单对象不能添加菜单

### win.ui.getSysMenu() <a id="win.ui.getSysMenu" href="#win.ui.getSysMenu">&#x23;</a>
[返回对象:popmenuObject](#popmenuObject)

### win.ui.getSysMenu(winform) <a id="win.ui.getSysMenu" href="#win.ui.getSysMenu">&#x23;</a>
返回系统菜单  
参数@1可指定窗体对象或窗体句柄  
请事先导入win.ui.menu

### win.ui.getSysMenu(winform,true) <a id="win.ui.getSysMenu" href="#win.ui.getSysMenu">&#x23;</a>
返回系统菜单  
并重置为缺省状态  
参数@1可指定窗体对象或窗体句柄  
请事先导入win.ui.menu

### win.ui.menu() <a id="win.ui.menu" href="#win.ui.menu">&#x23;</a>
[返回对象:menuObject](#menuObject)

[返回对象:menuObject](#menuObject)

### win.ui.menu(窗口) <a id="win.ui.menu" href="#win.ui.menu">&#x23;</a>
创建窗口菜单（创建右键弹出菜单请改用 win.ui.popmenu ）。  
参数 @1 可指定窗口或控件对象，  
如果参数 @1 指定控件对象则自动转换为所在的父窗口对象。  
如果参数 @1 传入窗口句柄，则添加菜单项无效

### win.ui.menu(窗口,菜单句柄) <a id="win.ui.menu" href="#win.ui.menu">&#x23;</a>
使用存在的菜单句柄创建菜单对象，  
如果参数 @1 指定控件对象则自动转换为所在的父窗口对象。  
如果参数 @1 传入窗口句柄，则添加菜单项无效

### win.ui.popmenu <a id="win.ui.popmenu" href="#win.ui.popmenu">&#x23;</a>
创建弹出菜单  
需要先调用 `import win.ui.menu`，不然发布后会报错。  
开发环境下运行，为了加快启动速度，不会百分百排除所有没有引用的库

### win.ui.popmenu() <a id="win.ui.popmenu" href="#win.ui.popmenu">&#x23;</a>
[返回对象:popmenuObject](#popmenuObject)

### win.ui.popmenu(窗口) <a id="win.ui.popmenu" href="#win.ui.popmenu">&#x23;</a>
创建弹出菜单，  
如果参数 @1 指定控件对象则自动转换为所在的父窗口对象。  
如果参数 @1 传入窗口句柄，则添加菜单项无效

### win.ui.popmenu(窗口,菜单句柄) <a id="win.ui.popmenu" href="#win.ui.popmenu">&#x23;</a>
使用存在的菜单句柄创建弹出菜单对象，  
如果参数 @1 指定控件对象则自动转换为所在的父窗口对象。  
如果参数 @1 传入窗口句柄，则添加菜单项无效

### 自动完成常量
_MENU_ITEM_IS_SUBMENU=-1  
_TPM_BOTTOMALIGN=0x20  
_TPM_CENTERALIGN=0x4  
_TPM_LEFTALIGN=0  
_TPM_RIGHTALIGN=0x8  
_TPM_TOPALIGN=0  
_TPM_VCENTERALIGN=0x10  
