点击查看详细介绍

严重谢谢键盘兄之UG中创建非模态对话框

poncho_wang 21年前 13611 7

购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008  QQ号:85585969  


键盘兄一句 “用非模态对话框” 惊醒了我。
长期以来一直使用模态的也就是大家说的Domodall()的方式,居然忘记了还有
非模态对话框。。汗颜阿。
说说具体创建过程吧。
1由于我打算用create的方式创建非模态对话框,所以需要把非模态对话框的属性设成Visible风格。(如果用CWnd::ShowWindow(SW_SHOW)的话则不需要)
2通过调用CDialog::Create函数来启动对话框,而不是CDialog:oModal。由于Create在显示了对话框后就立即返回,而DoModal是在对话框被关闭后才返回的。因此这样便可以实现UG可以正常操作但能够和对话框进行交互。
3)由于在Create返回后,不能确定对话框是否已关闭,也就无法确定对话框对象的生存期,因此只好在堆中构建对话框对象,而不能以局部变量的形式来构建之。所以需要CMyDialog * dlg =new CMyDialog();
4)由于使用new,一定要记得delete.窗口被删除后,架会调用CWnd:ostNcDestroy,程序可以在该函数中完成删除窗口对象的工作,具体代码如下用ClassWizard添加代码)
void CMyDialog:ostNcDestroy
{
delete this; //删除对象本身
}
这样就不必显式的调用delete来删除对话框对象了
5关闭对话框请用CWnd:estroyWindow(),不要用模态对话框里面的CDialog::EndDialog.在CMyDialog::OnOK()和OnCancel()里面调用DestroyWindow()即可。

0

最新回复 (7)
  • yang_0001 21年前
    1

    好贴!!!!!!!!!!!!!!!!!!!!!!!!!!

  • zizi 21年前
    2

    对话框出来了,什么也不操作,但是为什么过了一下UG自动关闭了呢,什么错误也没有。我没有用PrintErrorMessage
    能否贴个简单的

  • haiying 21年前
    3

    extern

  • marger 21年前
    4

    严重谢谢楼主,这么详细的说明!

  • marger 21年前
    5

    我在sw中也做了调用非模态窗口,但是弹出了一个对话框:
    提示:终止,重试,忽略。在点击几次 忽略之后 窗口出来了,这是为什么?

  • zizi 21年前
    6

    谢谢haiying!!!是我没注意到!

  • marger 21年前
    7

    这样做有个缺点就是可以无限次的重复打开窗口。有什么办法可以制止。

请登录后发表新帖