前言
UG/NX二次开发过程中,菜单栏作为程序入口是我们二次开发的第一步,网上已经有很多关于菜单栏的使用方法,但是大都是一个菜单功能对应一个dll。第一次接触二开的时候我也很纳闷,如果都这样使用我们开发每个功能岂不是都要新建一个project了?
这里西门子官方就给了一个实例,可以通过注册带回调的菜单栏,实现了一个菜单多个操作对应一个dll即可。
一、知识点提取
本实例通过注册带回调的菜单栏,实现了一个菜单多个操作对应一个项目dll,主要步骤如下:
1、注册开始菜单,应用模块入口
2、加载MenuBar菜单
3、回调方法实现
二、程序分析
1、源码所在目录
UGOPEN\SampleNXOpenApplications\.NET\MenuBarDotNetApp
2、主要功能分析
1、注册开始菜单,应用模块入口
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
MENU UG_APPLICATION
! ***NOTE button name must match the name you registered for
! your application in the MenuBarManager()->RegisterApplication call
APPLICATION_BUTTON SAMPLE_CSHARP_APP
LABEL Sample C Sharp Application
LIBRARIES MenuBarCSharpApp
MENU_FILES MenuBarCSharpApp.men
END_OF_MENU
这里通过LIBRARIES标签,指定了MenuBarCSharpApp这个生成文件
2、 加载MenuBar菜单
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
TOP_MENU
CASCADE_BUTTON SAMPLE_CSHARP_APP_MENU
LABEL Sample C Sharp
END_OF_TOP_MENU
MENU SAMPLE_CSHARP_APP_MENU
BUTTON SAMPLE_CSHARP_APP_BUTTON1
LABEL Print Button ID
ACTIONS SAMPLE_CSHARP_APP__action1
BUTTON SAMPLE_CSHARP_APP_BUTTON2
LABEL Test Callback Returns
ACTIONS SAMPLE_CSHARP_APP__action2
BUTTON SAMPLE_CSHARP_APP_BUTTON3
LABEL Print Application ID
ACTIONS SAMPLE_CSHARP_APP__action3
BUTTON SAMPLE_CSHARP_APP_BUTTON4
LABEL Print This Button Data
ACTIONS SAMPLE_CSHARP_APP__action4
TOGGLE_BUTTON SAMPLE_CSHARP_APP_BUTTON5
LABEL Print Toggle Status
ACTIONS SAMPLE_CSHARP_APP__action5
END_OF_MENU
这里ACTIONS指定的是方法,而不是dll文件
3、回调方法实现
public static int Startup()
{
int retValue = 0;
try
{
if (theSession == null)
{
theSession = Session.GetSession();
}
if (lw == null)
{
lw = theSession.ListingWindow;
}
theUI.MenuBarManager.RegisterApplication("SAMPLE_CSHARP_APP",
new NXOpen.MenuBar.MenuBarManager.InitializeMenuApplication(Program.ApplicationInit),
new NXOpen.MenuBar.MenuBarManager.EnterMenuApplication(Program.ApplicationEnter),
new NXOpen.MenuBar.MenuBarManager.ExitMenuApplication(Program.ApplicationExit), true, true, true );
theUI.MenuBarManager.AddMenuAction("SAMPLE_CSHARP_APP__action1", new NXOpen.MenuBar.MenuBarManager.ActionCallback(Program.PrintButtonIdCB));
theUI.MenuBarManager.AddMenuAction("SAMPLE_CSHARP_APP__action2", new NXOpen.MenuBar.MenuBarManager.ActionCallback(Program.TestCallbackReturnsCB));
theUI.MenuBarManager.AddMenuAction("SAMPLE_CSHARP_APP__action3", new NXOpen.MenuBar.MenuBarManager.ActionCallback(Program.PrintApplicationIdCB));
theUI.MenuBarManager.AddMenuAction("SAMPLE_CSHARP_APP__action4", new NXOpen.MenuBar.MenuBarManager.ActionCallback(Program.PrintButtonDataCB));
theUI.MenuBarManager.AddMenuAction("SAMPLE_CSHARP_APP__action5", new NXOpen.MenuBar.MenuBarManager.ActionCallback(Program.PrintToggleStatusCB));
}
catch (NXOpen.NXException ex)
{
// ---- Enter your exception handling code here -----
}
return retValue;
}