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