NX二次开发-调内部函数UGS::UICOMP_enum::set_width(int)更改BlockUI的枚举控件宽度

时间:2024-02-23 22:22:31
  • 版本

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日