手机访问

手机扫一扫

|投诉/建议

全国统一学习专线 8:30-21:00

杭州ug培训班

来源: 夏坤数控      编辑:佚名

杭州ug培训班

执行回调(菜单事件处理程序)

回调**用于操作记录和程序的ACTIONS命令与菜单按钮相关联。 但是,菜单文件不直接引用回调名称(例如程序或操作记录的名称),它引用必须注册到回调的字符串。

回调**AddMenuAction(C ,VB或C#),addMenuAction(JAVA)或UF_MB_add_actions(Open C)在自定义应用程序中**相关联的字符串进行注册。 有关注册回调的详细说明和示例,请参阅下面的语言具体细节。

警告:远程处理模式下的回调在.NET中不受支持。

例子

以下示例在NX菜单的不同位置注册相同的2个回调“my_app_hello”和“my_app_goodbye”。 要运行示例,将示例菜单文件放在“startup”目录中。 然后用NX**语言注册回调。

例子-1 将菜单项添加到工具菜单

例如,以下菜单文件将添加标记为“Hello”和“Goodbye”的菜单项到“工具”菜单的末尾。 NX使用的引用这些菜单项的文本字符串是“my_app_hello”和“my_app_goodbye”。 请参阅下面的语言具体示例,了解应用程序如何注册两个新菜单项的回调。

Menu file: adding_menu_items_to_tools_menu.men

VERSION 120

EDIT UG_GATEWAY_MAIN_MENUBAR

MENU UG_TOOLBOX

BUTTON MY_ITEM1

LABEL Hello

ACTIONS my_app_hello

BUTTON MY_ITEM2

LABEL Goodbye

ACTIONS my_app_goodbye

END_OF_MENU

要查找NX使用的**文本字符串来识别现有菜单(如UG_TOOLBOX),可查找NX中按钮显示的文本。 对于UG_TOOLBOX,文本显示为“Tools”。请注意,T带下划线,这意味着在菜单文件中有一个&之前用于定义该菜单项的T。如果你去%UGII_ROOT_DIR%/menus,并搜索所有的.men文件的“LABEL&Tools”,你会发现该菜单项在ug_main.men中的定义。同样,如果您正在寻找 "Menu→Information→Part→Part History...",您应该在%UGII_ROOT_DIR%/menus 目录搜索ug_main文件 ,在ug_main中找到"LABEL Part &History..."。"Part History..." 的BUTTON名称是 UG_INFO_PART_HISTORY.

例子-2 添加新菜单下拉菜单

还可以添加一个新的下拉菜单。 例如,以下菜单文件首先定义了一个内部名为“MY_MENU”的新菜单。 新菜单包含与示例1所示相同的菜单项。该示例然后显示如何将新菜单作为下拉菜单添加到主NX菜单栏的末尾,标签为“My App”。

菜单事件处理程序将与实施例1完全相同。

Menu file: adding_new_pulldown_menu.men

VERSION 120

EDIT UG_GATEWAY_MAIN_MENUBAR

MENU MY_MENU

BUTTON MY_ITEM1

LABEL Hello

ACTIONS my_app_hello

BUTTON MY_ITEM2

LABEL Goodbye

ACTIONS my_app_goodbye

END_OF_MENU

TOP_MENU

CASCADE_BUTTON MY_MENU

LABEL My App

END_OF_TOP_MENU

例子-3 向现有菜单添加新的下拉菜单

使用示例1和2中介绍的命令,还可以向现有菜单添加新的下拉菜单。 以下示例菜单文件将相同的下拉列表添加到“工Tools”菜单的末尾。 同样,菜单事件处理程序的实现方式与本节中的所有示例相同。

Menu file: adding_new_pulldown_to_existing_menu.men

VERSION 120

EDIT UG_GATEWAY_MAIN_MENUBAR

MENU MY_MENU

BUTTON MY_ITEM1

LABEL Hello

ACTIONS my_app_hello

BUTTON MY_ITEM2

LABEL Goodbye

ACTIONS my_app_goodbye

END_OF_MENU

MENU UG_TOOLBOX

CASCADE_BUTTON MY_MENU

LABEL My App

END_OF_MENU

例子-4

上述示例将新菜单项和下拉列表放在现有菜单的末尾。 也可以使用BEFORE和AFTER命令来代替MENU命令在现有菜单中定位新的菜单项。 以下示例菜单文件显示如何在文件菜单之后添加相同的下拉菜单: File tab→Utilities.

Menu file: positioning_new_items_withing_existing_menu.men

VERSION 120

EDIT UG_GATEWAY_MAIN_MENUBAR

MENU MY_MENU

BUTTON MY_ITEM1

LABEL Hello

ACTIONS my_app_hello

BUTTON MY_ITEM2

LABEL Goodbye

ACTIONS my_app_goodbye

END_OF_MENU

AFTER UG_FILE_UTILITIES_MENU

CASCADE_BUTTON MY_MENU

LABEL My App

END_OF_AFTER

NX Open for C 的回调注册

AddMenuAction方法(在MenuBarManager中找到)用于向NX注册回调。AddMenuAction中使用的输入名称必须与菜单文件中使用的字符串匹配。 在上面的例子中,用作动作的两个回调标题为“my_app_hello”和“my_app_goodbye”。 下面的示例(hello_goodbye.h和hello_goodbye.cpp)在InitializeCallbacks方法中注册了两个回调。 编译和链接此示例后,可执行文件(hello_goodbye.dll)应与上述示例菜单文件之一放置在startup文件夹中。

Header file: hello_goodbye.h

//------------------------------------------------------------------------------

//

// hello_goodbye.h

//

// Description:

// Contains NX entry points for the customized menu callbacks.

//

//------------------------------------------------------------------------------

#include <isotream>

#include <uf_def.h>

#include <uf.h>

#include <NXOpen/Session.hxx>

#include <NXOpen/MenuBar_MenuBarManager.hxx>

#include <NXOpen/MenuBar_MenuButton.hxx>

#include <NXOpen/MenuBar_MenuButtonEvent.hxx>

#include <NXOpen/UI.hxx>

#include <NXOpen/Callback.hxx>

#include <NXOpen/NXEception.hxx>

using namespace std;

using namespace NXOpen;

class HelloGoodbye;

extern HelloGoodbye *theHelloGoodbye;

class HelloGoodbye

{

// class members

public:

static Session* theSession;

static UI* theUI;

static ListingWindow* lw;

static int registered;

HelloGoodbye();

~HelloGoodbye();

//------------------------- Callback Prototypes -----------------------

MenuBar::MenuBarManager::CallbackStatus HelloCB( MenuBar::MenuButtonEvent*

buttonEvent );

MenuBar::MenuBarManager::CallbackStatus GoodbyeCB(

MenuBar::MenuButtonEvent* buttonEvent );

private:

void InitializeCallbacks();

};

Source file: hello_goodbye.cpp

//------------------------------------------------------------------------------

//

// hello_goodbye.cpp

//

// Description:

// Contains NX entry points for the customized menu callbacks.

//

//------------------------------------------------------------------------------

/* Include files */

#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )

# include <strstream>

# include <iostream>

using std::ostrstream;

using std::endl;

using std::ends;

using std::cerr;

#else

# include <strstream.h>

# include <iostream.h>

#endif

#include "hello_goodbye.h"

#include <NXOpen/ListingWindow.hxx>

#include <uf_ui_types.h>

#include <uf_ui.h>

//------------------------------------------------------------------------------

// Initialize static variables

//------------------------------------------------------------------------------

Session *(HelloGoodbye::theSession) = NULL;

UI *(HelloGoodbye::theUI) = NULL;

int HelloGoodbye::registered = 0;

ListingWindow* HelloGoodbye::lw = NULL;

HelloGoodbye *theHelloGoodbye;

//------------------------------------------------------------------------------

// Constructor for Callback Status Test

//------------------------------------------------------------------------------

HelloGoodbye::HelloGoodbye()

{

try

{

// Initialize the NX Open C API environment

theSession = Session::GetSession();

// Initialize the Open C API environment

int errorCode = UF_initialize();

if(0 != errorCode)

throw NXOpen::NXException::Create(errorCode);

theUI = UI::GetUI();

lw = theSession->ListingWindow();

InitializeCallbacks();

}

catch (const NXOpen::NXException& ex)

{ std::cerr << "Caught exception" << ex.Message() <<

std::endl;

}

return;

}

//------------------------------------------------------------------------------

// Register the callbacks with NX

//------------------------------------------------------------------------------

void HelloGoodbye::InitializeCallbacks()

{

try

{

if( registered == 0 )

{

theUI->MenuBarManager()->AddMenuAction("my_app_hello",

make_callback(this, &HelloGoodbye::HelloCB) );

theUI->MenuBarManager()->AddMenuAction("my_app_goodbye",

make_callback(this, &HelloGoodbye::GoodbyeCB) );

registered = 1;

}

}

catch (const NXOpen::NXException& ex)

{

std::cerr << "Caught exception" << ex.Message() << std::endl;

}

return;

}

//------------------------------------------------------------------------------

// Startup entrypoint for NX

//------------------------------------------------------------------------------

extern "C" DllExport void ufsta(char *param, int *retcod, int param_len) {

theHelloGoodbye = new HelloGoodbye();

return;

}

//------------------------------------------------------------------------------

// Public method GetUnloadOption

// This method specifies how a shared image is unloaded from memory

// within NX.

//------------------------------------------------------------------------------

extern "C" DllExport int ufusr_ask_unload()

{

return (int)Session::LibraryUnloadOptionAtTermination;

}

//------------------------------------------------------------------------------

// Method: UnloadLibrary()

// You have the option of coding the cleanup routine to perform any housekeeping

// chores that may need to be performed. If you code the cleanup routine, it is // automatically called by NX.

//------------------------------------------------------------------------------

extern "C" DllExport void ufusr_cleanup(void)

{

// do your cleanup here if necessary

return;

}

//------------------------- Callback Functions ---------------------------------

//------------------------------------------------------------------------------

// Callback Name: ActionStatusTestCB

// Displays a dialog that says "Hello"

//------------------------------------------------------------------------------

MenuBar::MenuBarManager::CallbackStatus HelloGoodbye::HelloCB(

NXOpen::MenuBar::MenuButtonEvent* buttonEvent )

{

if( !UF_initialize() )

{

uc1601("Hello", TRUE );

}

UF_terminate();

return MenuBar::MenuBarManager::CallbackStatusContinue;

}

//------------------------------------------------------------------------------

// Callback Name: GoodbyeCB

// Displays a dialog that says "Goodbye"

//------------------------------------------------------------------------------

MenuBar::MenuBarManager::CallbackStatus HelloGoodbye::GoodbyeCB(

NXOpen::MenuBar::MenuButtonEvent* buttonEvent )

{

if( !UF_initialize() )

{

uc1601("Goodbye", TRUE );

}

UF_terminate();

return MenuBar::MenuBarManager::CallbackStatusContinue;

}

NX Open for .NET的回调注册

AddMenuAction方法(在MenuBarManager中找到)用于向NX注册回调。AddMenuAction中使用的输入名称必须与菜单文件中使用的字符串匹配。 在上面的例子中,用作动作的两个回调标题为“my_app_hello”和“my_app_goodbye”。 下面的示例(hello_goodbye.vb)在启动方法中注册了两个回调。 编译和链接此示例后,可执行文件(hello_goodbye.dll)应与上述示例菜单文件之一放置在startup文件夹中。

VB代码,此处略

来自现有菜单项的程序,操作记录或回调

本主题讨论了在执行正常NX功能之前或之后**执行程序,操作记录或回调(也称为菜单事件处理程序)来定制现有NX菜单项的行为的方法。 本主题建立在“新建菜单项”的“执行程序”,“操作记录”和“回调”中的讨论中,并假定读者熟悉菜单文件的基础知识。

菜单文件与操作示例

以下菜单文件(.men扩展名)可用于向NX菜单项添加前置和后期操作:“文件”选项卡→“打开”。

Menu file: sample.men

VERSION 120

EDIT UG_GATEWAY_MAIN_MENUBAR

AFTER UG_FILE_NEW

BUTTON UG_FILE_OPEN

LABEL Open...

ACTIONS/REPLACE my_app_hello STANDARD my_app_goodbye

END_OF_AFTER

在上面的示例中,my_app_hello可以是整个程序,日志文件的名称,也可以是**AddMenuAction(C ,VB或CSharp),addMenuAction(JAVA)或UF_MB_add_actions(Open C)注册的回调。 在任何情况下,使用上述菜单文件将在打开标准NX文件打开对话框之前执行my_app_hello,然后**后运行my_app_goodbye。 对于my_app_hello和my_app_goodbye的示例回调实现,请转到特定于语言的详细信息部分(以您的**语言):新菜单项目的程序,操作记录和回调

警告:请注意,AFTER命令用于在“文件”菜单中维护“打开”菜单项的位置。 如果使用MENU命令,菜单文件也会将打开菜单项重新定位到文件菜单的末尾。

执行Common API程序

以下示例菜单文件 (my_programs.men)将在启动标准打开文件对话框之前调用自定义C#程序,然后调用VB程序。 打开文件对话框后,将运行一个C 程序和Java程序。 所有这些程序都是**在NX中选择“文件”选项卡→打开...菜单栏来启动的。

Menu file: my_programs.men

VERSION 120

EDIT UG_GATEWAY_MAIN_MENUBAR

AFTER UG_FILE_NEW

BUTTON UG_FILE_OPEN

LABEL Open...

ACTIONS/REPLACE c_sharp_program vb_program STANDARD cpp_program java_program

END_OF_AFTER

提示:c_sharp_program.dll,vb_program.dll,cpp_program.dll和java_program.class文件都应该放在“application”文件夹中,如下所示:

【詹老师】:

了解更多杭州ug培训>>>>杭州ug培训

了解更多杭州培训网>>>>杭州培训网

上一篇: 没有了 下一篇: 杭州ug培训学校
相关新闻 更多 >
0.027840s