iCAx开思工具箱

标题: 严重谢谢键盘兄之UG中创建非模态对话框 [打印本页]

作者: poncho_wang    时间: 2004-9-1 21:11
标题: 严重谢谢键盘兄之UG中创建非模态对话框
键盘兄一句 “用非模态对话框” 惊醒了我。
长期以来一直使用模态的也就是大家说的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()即可。
  
具体点CMyDialog里面要添加的东西按上面操作即可)
void DisplayDialog()
  
{
  
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
  
       CMyDialog * dlg = new CMyDialog();
       dlg->Create(IDD_DIALOG);
  
}
  
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
{
    /* Initialize the API environment */
    int errorCode = UF_initialize();
  
  DisplayDialog();
    if ( 0 == errorCode )
    {
        /* TODO: Add your application code here */
  
        /* Terminate the API environment */
        errorCode = UF_terminate();
    }
  
    /* Print out any error messages */
   &nbsprintErrorMessage( errorCode );
}
作者: yang_0001    时间: 2004-12-4 12:52
好贴!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: zizi    时间: 2004-12-4 17:13
对话框出来了,什么也不操作,但是为什么过了一下UG自动关闭了呢,什么错误也没有。我没有用PrintErrorMessage
能否贴个简单的
作者: haiying    时间: 2004-12-5 09:47
extern "C"  int ufusr_ask_unload( void )
  
{
//是不是用了下面的语句,
    return(UF_UNLOAD_UG_IMMEDIATELY);  
//改为:
return( UF_UNLOAD_SEL_DIALOG );
  
}
作者: marger    时间: 2004-12-5 11:25
严重谢谢楼主,这么详细的说明!
作者: marger    时间: 2004-12-5 11:27
我在sw中也做了调用非模态窗口,但是弹出了一个对话框:
提示:终止,重试,忽略。在点击几次 忽略之后 窗口出来了,这是为什么?
作者: zizi    时间: 2004-12-5 18:56
谢谢haiying!!!是我没注意到!
作者: marger    时间: 2004-12-7 10:26
这样做有个缺点就是可以无限次的重复打开窗口。有什么办法可以制止。




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3