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

阿飛2018發表於2021-10-20
  • 版本

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日

相關文章