NX二次開發-調內部函數UGS::UICOMP_enum::set_width(int)更改BlockUI的枚舉控件寬度

  • 版本

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日