plus模拟右键菜单研究

By admin at 2018-02-04 • 0人收藏 • 519人看过

GIF.gif

import win.ui;
/*DSG{{*/
mainForm = win.form(text="plus模拟菜单";right=663;bottom=352;bgcolor=8421376)
mainForm.add()
/*}}*/

var menufuc = function(menumode){
	menumode.skin(
	
		color = {
        	hover = 0xFF3a9ff7; 
    	}
	)
/*
	menumode.oncommand = function(id,event){
		mainForm.msgbox(menumode)
	}
*/
}

//win.ui.menu
var ddd = 1;
var tabmenu = {};
var menutitle = {"第一个菜单";"第二个菜单";"第三个菜单";{"包含子菜单";{"子菜单1";"子菜单2"}}}
mainForm.wndproc = function(hwnd,message,wParam,lParam){
	select( message ) { 
		case 0x205/*_WM_RBUTTONUP*/{
			//鼠标右键弹起,下面获取坐标
			var x,y = win.getMessagePos(lParam);
			var lieadd = 0;
			if(#tabmenu){
				ddd = 1;
				lieadd = 0;
				for(k,v in tabmenu){
					//if(type(v) != "table"){
						mainForm[v].close()
						table.remove(tabmenu,k);	
					//}
					
				}

			}
			
			for(k,v in menutitle){
				if(type(v) != "table"){
					owner.add( 
					["menuplus"++ddd] ={cls="plus";text=v;left=x;top=y+25*lieadd;right=x+128;bottom=y+25*(lieadd+1);align="left";background="\res\cdbg2.fw.png";notify=1;paddingLeft=32;repeat="center";x=0.5;dl=1;dt=1};
					)
					menufuc(owner["menuplus"++ddd])
					table.push(tabmenu,"menuplus"++ddd);
					ddd++;
					lieadd++;
				}else {
					owner.add( 
					["menuplus"++ddd] ={cls="plus";text=v[1];left=x;top=y+25*lieadd;right=x+128;bottom=y+25*(lieadd+1);align="left";background="\res\cdbg.fw.png";notify=1;paddingLeft=32;repeat="center";x=0.5;dl=1;dt=1};
					)
					//menufuc(owner["menuplus"++ddd])
					owner["menuplus"++ddd].onMouseHover = function(wParam,lParam){
						for(k2,v2 in v[2]){
							mainForm.add( 
							["menuplus"++ddd] ={cls="plus";text=v2;left=x+128;top=y+25*(lieadd-1);right=x+128*2;bottom=y+25*(lieadd);align="left";background="\res\cdbg2.fw.png";notify=1;paddingLeft=32;repeat="center";x=0.5;dl=1;dt=1};
							)
							menufuc(mainForm["menuplus"++ddd])
							table.push(tabmenu,"menuplus"++ddd);
							ddd++;
							lieadd++;
						}
					}
					table.push(tabmenu,"menuplus"++ddd);
					ddd++;
					lieadd++;
					
					
				}
				
				
				//menufuc(owner["menuplus"++ddd]);
				/*
table.push(tabmenu,"menuplus"++ddd);
				ddd++;
				lieadd++;
*/
			}
			
			
			
		}
		else{
			
		}
	}
	//无返回值则继续调用默认回调函数
}




mainForm.enableDpiScaling();
mainForm.show();

return win.loopMessage();

越界/调整大小/...还有很多问题..

1 个回复 | 最后更新于 2018-02-04
2018-02-04   #1

菜单是支持自绘的,自绘的方法跟范例中的listbox一样。

import win.ui;

import win.ui.menu;

/*DSG{{*/var winform = win.form(text="菜单用法演示";right=349;bottom=249) /*}}*/

win.ui.menu.onMeasureItem = function(measureItem){ }

win.ui.menu.onDrawItem = function(drawItem){    }

var menuFile = win.ui.popmenu(winform);

menuFile.ownerDraw = true;

winform.show()

win.loopMessage();

需要定义这几个函数,关于高级界面不完美这个问题,完美这个东西是没有边界的,而且你首先是要从基础学起,不可能一下子就能做出非常完美的界面了。

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前在学aardio+halcon机器视觉.
Htmlayout界面在线学习文档
Sciter中文在线文档Sciter在线学习文档
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
C大Aardio论坛:Aar爱好者论坛
简码教程网:简码编程
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...