NX/UG二次开发—Block UI—关于使用代码关闭UI

对与有些应用场景,用户希望Blcok UI自动关闭。比如,子窗口选择完对象后。网上有通过内部函数关闭窗口,如下所示:

JAM_lookup_tag

class UGS::UIFW * UIFW_ask_uifw(void)

int UGS::UIFW::end_dialog(class UGS::UICOMP *,int)

但关闭后,UI界面中的输入值,并未保存上一次操作的,类似点击了关闭或者取消按钮。与内部函数DLG_call_cancel_cb执行效果差不多,但不如DLG_call_cancel_cb简洁。

在执行这些函数前,执行PerformApply或者调用ok_cb\apply_cb均不能保存界面参数。

通过测试,发现模拟鼠标点击效果可以实现既关闭窗口,又保存界面参数。Blcok UI的确定、取消、应用按钮,与自己添加的按钮属性不同。因此采用,类名和名称来遍历确定按钮的窗口句柄:

CWnd * GetChild(CWnd * cWnd, int *indx)
{
	CWnd * tWnd = cWnd->GetWindow(GW_CHILD);
	while (tWnd)
	{
		char className[MAX_PATH];
		::GetClassName(tWnd->GetSafeHwnd(), className, 256);
		char captionName[MAX_PATH];
		::GetWindowText(tWnd->GetSafeHwnd(), captionName, 256);
		if (0 == strcmp(className, "Button") && (0 == strcmp(captionName, "确定") || 0 == strcmp(captionName, "OK")))
		{
			if (*indx == 0)	return tWnd;
			(*indx)--;
		}
		CWnd * nWnd = GetChild(tWnd, indx);
		if (nWnd != NULL) return nWnd;
		tWnd = tWnd->GetNextWindow();
	}
	return NULL;
}

获取确定按钮窗口句柄后,发送点击消息:

::SendMessage(OKWnd->GetSafeHwnd(), BM_CLICK, 0, 0); 

注意事项:

如果是主窗口,则遍历到的第一个即为所求,如果是子窗口,会存在多个确定按钮,因此要根据实际应用情况,来确定第几个。

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

恩·艾克斯·红

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

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

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

打赏作者

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

抵扣说明:

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

余额充值