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