我在InitiDialog里用AddString添加进先拉框的,第一次开的时候有。把对话框关了再开就没有了,为什么?另外,如果改成无模式对话框,就会出访存错误。太郁闷了。

解决方案 »

  1.   

    发给我看看
    [email protected]
      

  2.   

    怎么样销毁呢,不是DistroyWidow吗?
      

  3.   

    在OnOK和OnCancel中ShowWindow(SW_HIDE)然后返回,不要调基类的对应函数,下次要显示时ShowWindow(SW_SHOW)。
      

  4.   

    showwindow 还是 domodal 得非模式
      

  5.   


    如果使用无模式的对话框,简单步骤如下:
    1.在使用对话框的类中声明成员函数:
    CMyDlg* m_pMyDlg;2.在使用对话框的类中初始化该成员。如果是CWnd的子类,在OnCreate重载中即可。m_pMyDlg=new CMyDlg() 
    //如果从对话框中引用,父窗口的变量或方法,可以使用CMyDlg(this),但要在CMyDlg 中设置一个到该类的指针。
    //在相应的CMyDlg的事件处理中,就可以用该指针调用窗口的方法了。 
    m_pMyDlg->Create(IDD_MYDLG,this);3.在需要的地方显示该对话话,并进行相应操作。m_pMyDlg->ShowWindow(SW_SHOW);
    4.在合适地位置销毁该对话框。
    if(pMyDlg)
       delete m_pMyDlg;
      

  6.   

    从数据丢失角度看,你肯定已经把对话框销毁了。如果你想保持数据,就不应该销毁它可能导致销毁的动作有
    1. 点了右上角的叉,又没有截掉WM_SYSCOMMAND或者OnOK,或者截获了但是在处理函数中直接或者间接的调用了CDialog::OnOK;CDialog::OnCancel或者EndDialog
    2. 按了回车而又没有截了defaultButton的处理函数
    或者截获了但是在处理函数中直接或者间接的调用了CDialog::OnOK;CDialog::OnCancel或者EndDialog3. 直接或者间接的调用了CDialog::OnOK;CDialog::OnCancel或者EndDialog4. 删除了或者析构了对话框对象你上面所谓的关掉对话框,如果想保持数据,绝对不能通过任何途径调用CDialog::OnOK;CDialog::OnCancel或者EndDialog/DestroyWindow.当你想关时,只能用ShowWindow上面哪位说ShowWindow和DoModal相关,那时瞎说吧:)
      

  7.   

    我在InitiDialog里用AddString添加进先拉框的,第一次开的时候有。把对话框关了再开就没有了。既然是在init里面做addstring,每次创建这个对话框肯定都会进行添加的。。除非你的关了是指把控件清空掉然后hide
      

  8.   

    正确销毁非模式:
    1:调用DestroyWindow();
    2:重载PostNcDestroy函数,删除指针:delete this;