plus模拟右键菜单研究

By admin at 2018-02-04 • 1人收藏 • 1186人看过

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();

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

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...