NX二次开发 UG内部函数 是否取消撤销标记(Block UI取消或者关闭不回退方法)
string g_nxlib_path = "D:\Program Files\Siemens\NX 10.0.0.24\UGII";//请指定正确的UGII路径
bool dlx_set_close_undo(tag_t ui_tag)
{//是否取消撤销标记(Block UI取消或者关闭不回退方法)(NX版本通用)
if (0 == UF_is_initialized())
UF_initialize();
if (_NX_VERSION < _UGNX8500000)
return false;//8.5以下版本不能用
if (NULL_TAG == ui_tag)
return false;
if (0 == (int)g_nxlib_path.length())
return false;
string libugdll[2];
libugdll[0] = CharMakeLower(g_nxlib_path + "\\libsyss.dll");
libugdll[1] = CharMakeLower(g_nxlib_path + "\\libuifw.dll");
if (!IsPathExist(libugdll[0]))
return false;
if (!IsPathExist(libugdll[1]))
return false;
typedef void* (*TagToPtr_fp_t)(unsigned int);//libsyss.dll//void * TAG_ask_pointer_of_tag(unsigned int)
typedef void* (*AskUIOpts_fp_t)(void*);//libuifw.dll//class UGS::UIFW_options * UGS::UICOMP::ask_ui_options(void)
typedef void (*SetUIStyle_fp_t)(void*, bool);//libuifw.dll//void UGS::UIFW_options::set_lightweight_mode(bool)
typedef void (*SetUIClose_fp_t)(void*, bool);//libuifw.dll//void UGS::UIFW_options::set_close_button(bool)
TagToPtr_fp_t TagToPtr = NULL;
AskUIOpts_fp_t AskUIOpts = NULL;
SetUIStyle_fp_t SetUIStyle = NULL;
SetUIClose_fp_t SetUIClose = NULL;
wchar_t* wp0 = StringToWchar(libugdll[0]);
HMODULE ssss0 = LoadLibrary(wp0);
data_free(wp0);
wchar_t* wp1 = StringToWchar(libugdll[1]);
HMODULE ssss1 = LoadLibrary(wp1);
data_free(wp1);
#ifdef _WIN64
TagToPtr = (TagToPtr_fp_t)GetProcAddress(ssss0, "?TAG_ask_pointer_of_tag@@YAPEAXI@Z");
AskUIOpts = (AskUIOpts_fp_t)GetProcAddress(ssss1, "?ask_ui_options@UICOMP@UGS@@UEBAPEAVUIFW_options@2@XZ");
SetUIStyle = (SetUIStyle_fp_t)GetProcAddress(ssss1, "?set_lightweight_mode@UIFW_options@UGS@@UEAAX_N@Z");
SetUIClose = (SetUIClose_fp_t)GetProcAddress(ssss1, "?set_close_button@UIFW_options@UGS@@UEAAX_N@Z");
#else
TagToPtr = (TagToPtr_fp_t)GetProcAddress(ssss0, "?TAG_ask_pointer_of_tag@@YAPAXI@Z");
AskUIOpts = (AskUIOpts_fp_t)GetProcAddress(ssss1, "?ask_ui_options@UICOMP@UGS@@UBEPAVUIFW_options@2@XZ");
SetUIStyle = (SetUIStyle_fp_t)GetProcAddress(ssss1, "?set_lightweight_mode@UIFW_options@UGS@@UAEX_N@Z");
SetUIClose = (SetUIClose_fp_t)GetProcAddress(ssss1, "?set_close_button@UIFW_options@UGS@@UAEX_N@Z");
#endif
if (AskUIOpts != NULL && TagToPtr != NULL)
{
unsigned int tag = ui_tag;
void* uiOpts = AskUIOpts(TagToPtr(tag));
if (uiOpts != NULL && SetUIStyle != NULL && SetUIClose != NULL)
{
SetUIStyle(uiOpts, true);//没有这句点X会Undo
SetUIClose(uiOpts, true);//没有这句就算有上一句都会Undo
FreeLibrary(ssss0);
FreeLibrary(ssss1);
return true;
}
}
FreeLibrary(ssss0);
FreeLibrary(ssss1);
return false;
}
void dlx_set_close_undo(NXOpen::BlockStyler::BlockDialog* theDialog)
{//是否取消撤销标记
dlx_set_close_undo(theDialog->TopBlock()->Tag());
}