- 版本
NX11+VS2013
- 内容说明
这个内部函数的设置方法,我之前不会,是QQ群里的一位大佬分享出来的。
关于这块,我也百度搜了一下,找到了几个相关的。
1.直接手动修改BlockUI界面
在低版本是可以手动设置的BlockUI的(NX9是可以的,到了NX11就不行了)
图片为转载,出处如下
https://www.cnblogs.com/bizca/p/4998344.html
2.调用内部函数
UGS::UICOMP_enum::set_width(int)
相关参考资料 https://blog.csdn.net/u012077233/article/details/118557584
- 代码
static void setEnumWidth(const tag_t uiTag, int width) { HMODULE uifw = LoadLibrary("libuifw"); HMODULE syss = LoadLibrary("libsyss"); typedef void*(*TagToPtr_fp_t)(tag_t); typedef void(*setWidth_fp_t)(void*, int); TagToPtr_fp_t TagToPtr = NULL; setWidth_fp_t setWidth = NULL; char* ptrName = "?TAG_ask_pointer_of_tag@@YAPEAXI@Z"; char* widthName = "?set_width@UICOMP_enum@UGS@@UEAAXH@Z"; TagToPtr = (TagToPtr_fp_t)GetProcAddress(syss, ptrName); setWidth = (setWidth_fp_t)GetProcAddress(uifw, widthName); if (TagToPtr != NULL && setWidth != NULL) { setWidth(TagToPtr(uiTag), width); } FreeLibrary(uifw); FreeLibrary(syss); }
- 使用方法
加上#include <windows.h>头文件
如果提示这个问题,就添加#undef CreateDialog
去initialize_cb回调里使用函数
//------------------------------------------------------------------------------ //Callback Name: initialize_cb //------------------------------------------------------------------------------ void TestEnmuDemo::initialize_cb() { try { group = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("group")); enum0 = dynamic_cast<NXOpen::BlockStyler::Enumeration*>(theDialog->TopBlock()->FindBlock("enum0")); enum01 = dynamic_cast<NXOpen::BlockStyler::Enumeration*>(theDialog->TopBlock()->FindBlock("enum01")); enum02 = dynamic_cast<NXOpen::BlockStyler::Enumeration*>(theDialog->TopBlock()->FindBlock("enum02")); setEnumWidth(enum0->Tag(), 5); } catch(exception& ex) { //---- Enter your exception handling code here ----- TestEnmuDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what()); } }
- 演示
最后感谢大佬的分享,谢谢大佬。
阿飞
2021年10月20日
2021年10月24日补充
这是另外一位大佬分享到QQ群的
void* GetUITag(tag_t topBlockTag)//枚举对话框调用内部函数另一种方法 { char Lib[256] = ""; char UGII_BASE_DIR[256] = ""; strcpy(UGII_BASE_DIR, getenv("UGII_BASE_DIR")); sprintf(Lib, "%s%s", UGII_BASE_DIR, "\\NXBIN\\libjam.dll"); typedef void* (*load_ufusr_f_p_t1)(tag_t pointer); load_ufusr_f_p_t1 GetTag = NULL; int error = UF_load_library(Lib, "JAM_lookup_tag", (UF_load_f_p_t*)&GetTag); void* topBlockPtr = GetTag(topBlockTag); UF_unload_library(Lib); return topBlockPtr; }
UF_initialize(); char* temPath = ""; UF_translate_variable("UGII_BASE_DIR", &temPath); char LibDir[256] = ""; strcpy_s(LibDir, temPath); strcat_s(LibDir, "\\NXBIN\\libuifw.dll"); typedef void(*load_ufusr_f_p_t)(void*, int); load_ufusr_f_p_t EnumSetWidth = NULL; int error = UF_load_library(LibDir, "?set_width@UICOMP_enum@UGS@@UEAAXH@Z", (UF_load_f_p_t*)&EnumSetWidth); if (EnumSetWidth != NULL) { EnumSetWidth(GetUITag(enum0->Tag()), 8); } UF_unload_library(LibDir); UF_terminate();