模式对话框和无模式对话框本质上有什么区别??把对话框分成有模式和无模式有什么用意??
我在一个主对话框的基础上点按钮创建了一个模式对话框,上边添加一个按钮,一点按钮,启动一个计时器,当我点这个模式对话框的默认自带的那个OK按钮时,计时器自动就停了,而如果创建的是无模式的,对话框都消失了,但计时器还在计时,这是怎么回事???如果模式和非模式的区别只是模式对话框不关不能干别的,无模式不是的话,为什么同样点OK按钮效果不同??为什么不统一起来??让他们在这个地方不同的用意是什么???
假如我这么着创建了模式对话框:
CMydlg dlg;
dlg.DoModal();
那么我点了OK按钮以后,这个dlg对象好像还存在,但为什么定时器就停了呢??模式对话框上的OK按钮按下后都产生哪些效果??光是对话框看不到了吗??Cancel呢?无模式的呢??
谢谢

解决方案 »

  1.   

    When you call DoModal function to isplay a modal dialog box, this function is breaked until you close the dialog box.
     In this case, the dialog box is destroyed before the function DoModal returned. 
    so the timer is killed.but in modeles dialog box, the window is not be destroyed when you close the window.
    it is only hidden. you must call DestoryWindow to destory the dialog box clearly.
      

  2.   

    krh2001(边城浪子) ( )
    ----------------------------
    哇哇哇,水平好高哦,我的英语,居然不用金山词霸就能看得懂你在说什么。谢谢回答你的意思是不是说那个Timer依附在对话框上,对话框窗口一销毁,timer也就跟着消失了,对不对?
    那个对话框窗口销毁本质上是什么意思??是不是那个dlg对象没了??我感觉它还存在啊??因为关了以后还能引用它的东西,比如dlg.m_strName之类的??我搞不懂对话框窗口是个什么东西,它跟窗口对象什么关系??另外,无模式对话框默认自带的ok点下后产生什么作用??只是把它隐藏了吗??
      

  3.   

    非模态对话框对象是用new操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上,必须调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框。调用CWnd::DestroyWindow是直接删除窗口的一般方法。由于缺省的CDialog::OnOK和CDialog::OnCancel函数均调用EndDialog,故程序员必须编写自己的OnOK和OnCancel函数并且在函数中调用DestroyWindow来关闭对话框。由于你没有编写自己的OnOK函数,所以你点下OK只是调用了EndDialog,并没有删除对象
      

  4.   

    to youyingbo() 
    不要用金山词霸翻译技术贴。
    不是人家说得不好,是你的翻译工具太滥了
      

  5.   

    有几点意见不同啊>> so the timer is killed.
    模态对话框和timer有什么关系?
    >>but in modeles dialog box, the window is not be destroyed when you close the window.
    it is only hidden. you must call DestoryWindow to destory the dialog box clearly.
    点关闭按钮只是把它隐藏了吗,并没有真正关闭?我的理解是关闭按钮会引起WM_CLOSE消息,然后系统缺省会DestroyWindow。不知我的理解是否有误。
      

  6.   

    不好意思,我没有看清lz的问题,lz原来在用timer做测试
      

  7.   

    The CDialog Object and Dialog window are different. By default, The dialog box cantnot destoryed when it be closed.
    you can monitor the WM_DESTROY message. when this message is send to you dialog window, the window will be destoryed.
      

  8.   

    to xingshi310(星矢)
    ----------
    我那是开玩笑,意思是说我不用金山词霸就能看得懂,自夸一下,是开个玩笑,你怎么理解的??
    另外,现在都是用什么翻译软件???