NX二次开发 UG内部函数 是否取消撤销标记(Block UI取消或者关闭不回退方法)

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());
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅雷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值