NX二次開發-調內部函數UGS::UICOMP_enum::set_width(int)更改BlockUI的枚舉控件寬度
- 2021 年 10 月 20 日
- 筆記
- (NX二次開發)內部函數調用
- 版本
NX11+VS2013
- 內容說明
這個內部函數的設置方法,我之前不會,是QQ群里的一位大佬分享出來的。
關於這塊,我也百度搜了一下,找到了幾個相關的。
1.直接手動修改BlockUI界面
在低版本是可以手動設置的BlockUI的(NX9是可以的,到了NX11就不行了)
圖片為轉載,出處如下
//www.cnblogs.com/bizca/p/4998344.html
2.調用內部函數
UGS::UICOMP_enum::set_width(int)
相關參考資料 //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日