- 版本
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日