一、概述
最近学习NX二次开发,看到NX打开装配模型或者加载模型时会显示进度条的问题,个人觉得很有意思,然后参考阿飞2018中的文章进行学习。
二、代码解析
//User Defined Header File#include <uf.h>#include <uf_ui.h>#include <uf_modl.h>#include <uf_view.h>#include <atlstr.h>//User Defined codeUF_initialize();//加载char *library_name = "D:\\ug\\NXBIN\\libdisp.dll";//调内部函数 创建进度条typedef void(*create_progress_bar)(int v1, bool v2, long *v3);//定义传参create_progress_bar MT_create_progress_bar = NULL;UF_load_library(library_name, "?MT_create_progress_bar@@YA_NH_NPEAJ@Z", (UF_load_f_p_t *)&MT_create_progress_bar);//调内部函数 设置进度条的当前位置typedef void(*set_progress_pos)(long *v1, int v2);//定义传参set_progress_pos MT_set_progress_pos = NULL;UF_load_library(library_name, "?MT_set_progress_pos@@YAXPEAJH@Z", (UF_load_f_p_t *)&MT_set_progress_pos);//调内部函数 显示进度条typedef void(*show_progress_bar)(long *v1);//定义传参show_progress_bar MT_show_progress_bar = NULL;UF_load_library(library_name, "?MT_show_progress_bar@@YAXPEAJ@Z", (UF_load_f_p_t *)&MT_show_progress_bar);//调内部函数 设置进度条的起始值和终止值typedef void(*set_progress_range)(long *v1, int v2, int v3);//定义传参set_progress_range MT_set_progress_range = NULL;UF_load_library(library_name, "?MT_set_progress_range@@YAXPEAJHH@Z", (UF_load_f_p_t *)&MT_set_progress_range);//调内部函数 获得提示环境句柄(输出long*指针)typedef __int64(*ask_progress_cue_context)(void);//定义传参ask_progress_cue_context MT_ask_progress_cue_context = NULL;UF_load_library(library_name, "?MT_ask_progress_cue_context@@YAHXZ", (UF_load_f_p_t *)&MT_ask_progress_cue_context);//调内部函数 删除进度条typedef __int64(*delete_progress_bar)(long *v1);//定义传参delete_progress_bar MT_delete_progress_bar = NULL;UF_load_library(library_name, "?MT_delete_progress_bar@@YAXPEAJ@Z", (UF_load_f_p_t *)&MT_delete_progress_bar);//调内部函数 进度条显示文本typedef __int64(*set_progress_text)(long *v1, char *v2, bool v3);//定义传参set_progress_text MT_set_progress_text = NULL;UF_load_library(library_name, "?MT_set_progress_text@@YAXPEAJPEAD_N@Z", (UF_load_f_p_t *)&MT_set_progress_text);if (MT_ask_progress_cue_context == NULL || MT_create_progress_bar == NULL || MT_show_progress_bar == NULL|| MT_set_progress_text == NULL || MT_set_progress_range == NULL || MT_set_progress_pos == NULL|| MT_delete_progress_bar == NULL){uc1601("温馨提示:请仔细检查,存在错误", 1);return;}//获得提示环境句柄(输出long*指针)__int64 cc = MT_ask_progress_cue_context();//创建进度条long aa = 0;MT_create_progress_bar(cc, true, &aa);//true和false控制是否显示百分比数字//显示进度条MT_show_progress_bar(&aa);//进度条显示文本MT_set_progress_text(&aa, "Loading progress prompt", true);//此处用中文不显示//设置进度条的起始值和终止值int num = 100;MT_set_progress_range(&aa, 0, num);for (int i = 0; i < num; i++){//在NX状态区显示一行文本UF_UI_set_status("白雪公主的后妈");//创建块UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔double Corner_pt[3] = { i * 150, 0.0, 0.0 };//设置原点char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高tag_t BlkTag = NULL_TAG;UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);//设置进度条的当前位置MT_set_progress_pos(&aa, i);}//删除进度条MT_delete_progress_bar(&aa);//获得工作视图的tagtag_t work_view = NULL_TAG;UF_VIEW_ask_work_view(&work_view);//适合窗口UF_VIEW_fit_view(work_view, 1.0);//在NX状态区显示一行文本UF_UI_set_status("白雪公主的后妈提示:创建完成");//卸载UF_unload_library(library_name);UF_terminate();
三、效果展示