hur.cn - 华软网

 热门搜索

如何实现:关闭对话框,但不是真正的关闭,

  作者:未知    来源:网络    更新时间:2011/8/16
问题1:点击对话框的"X"之后,立即隐藏对话框, ,不要真正的关闭!!!!

如何实现之???  

对话框上的控件里面的值要保存,,,,等到下次打开该对话框的时候, 控件里面显示的值就是上次关闭时候的值。

听懂了把???  不是真正的关闭


问题2:是个基础问题,与上面的问题毫无关系!!!

 非模式对话框 OnCancel里面 先注释掉CDialog::OnCancel,然后加一句:DestroyWindow(),,然后到PostNcWindow里面加一句: delete this;   意思是说释放掉 CXXDialog的对象的内存?  

我很奇怪,怎么能删掉自身呢??


两个问题啊,踊跃发言,,,, 第一个问题和第二个问题毫无关,请不要混淆。。。



---华软 网友回答---
第一个问题:

OnCancel里面,先注释掉CDialog::OnCancel,然后加一句:ShowWindow(false);

---华软网友回复---
第一个问题。。在CXXDlg::SysCommand修改关闭消息的响应。。。。


---华软网友回复---
小想法:
设置一个静态的变量;static;
---华软网友回复---
第一个问题在CDialog::OnCancel之前ShowWindow(SW_HIDE),然后return,不运行CDialog::OnCancel就可以。但这不能真正解决你的问题,因为开启时你还要把他调出来,你是打开已经存在的,而不是重新打开了,建议你把需要的参数保存在文本里面,开启时加载初始化就可以啦。

第二个问题,多看看书,OnCancel执行后就会调用DestroyWindow
---华软网友回复---
你的意思,我得用文本保存控件里面的值?


第二个问题:我知道  在OnCancel里面 添加DestroyWindow!!!

最终会引发PostNcDestroy的调用,

所以在 PostNcDestroy里面添加一句:delete this!!

 我想问的斯,我们写的C++类的是不能delete  this。。

为什么  对话框能销毁自身呢?



引用 4 楼 qiuxin425 的回复:
第一个问题在CDialog::OnCancel之前ShowWindow(SW_HIDE),然后return,不运行CDialog::OnCancel就可以。但这不能真正解决你的问题,因为开启时你还要把他调出来,你是打开已经存在的,而不是重新打开了,建议你把需要的参数保存在文本里面,开启时加载初始化就可以啦。

第二个问题,多看看书,OnCancel执行后就会调用DestroyWindow

---华软网友回复---
问题1
模态情况下比较难实现,还是保存值,第二次加载的时候再赋值为好,否则就去研究DoModal的代码
非模态直接ShowWindow即可

问题2
如此用的一定是new CXXXDialog出的对话框才行
delete this;可以删除自身,没人说不能删除自身。
这里就把this当成一个普通的指针就好了
---华软网友回复---
引用 5 楼 seujh 的回复:
你的意思,我得用文本保存控件里面的值?


第二个问题:我知道 在OnCancel里面 添加DestroyWindow!!!

最终会引发PostNcDestroy的调用,

所以在 PostNcDestroy里面添加一句:delete this!!

 我想问的斯,我们写的C++类的是不能delete this。。

为什么 对话框能销毁自身呢?




引用 4……


看你是启动付上次的值(文本保存),还是在程序中弹出窗口,可以用构造函数传值
---华软网友回复---
隐藏窗口
---华软网友回复---
专门写一个可以序列化的类来保存对话框的当前设置

当然奇葩一点模态对话框也可以设置为100%透明,呵呵。
---华软网友回复---
专门写一个可以序列化的类来保存对话框的当前设置

怎样写啊,给个例子吧??


引用 9 楼 acaiacc 的回复:
专门写一个可以序列化的类来保存对话框的当前设置

当然奇葩一点模态对话框也可以设置为100%透明,呵呵。

---华软网友回复---
能在对话框类的析构函数里面 DestroyWindow吗?


---华软网友回复---
疑问: 我在主窗口中显示 对话框,重载了对话框的OnCancle函数,这个函数我什么都没有做,只非那根了一句话:

ShowWindow(SW_HIDE)


然后再显示的时候,什么都没有啊


---华软网友回复---
引用 11 楼 seujh 的回复:
能在对话框类的析构函数里面 DestroyWindow吗?

一试便知,会报错的
---华软网友回复---
C++">ShowWindow(false);

---华软网友回复---
学习 学习
---华软网友回复---
再关闭对话框时把所有值保存在变量里,下次打开对话框显示之前再把这些值赋给对话框不就行了吗!
如CDlgMain是主对话框,CDlg1是弹出对话框,CDlg1有文本编辑框控件IDC_Text。
在CDlgMain中加个变量CString m_strDlg1;CDlg1里面有变量CString m_str。
于是在CDlg1弹出前给CDlg1的m_str赋值

如:
C++">void CDlgMain::OnButtonDlg1
{
    CDlg1 dlg;
    dlg.m_str = m_strDlg1;//这样就把CDlgMain的变量m_strDlg1传给CDlg1的m_str,此时对话框还没显示,
                                          //在CDlg1对话框的OnInitDialog函数中把控件的值显示出来即可
    int n_dlg =  dlg.DoModal();
    if(n_dlg == IDOK)
   {
       m_strDlg1 =  dlg.m_str;//这样再对话框关闭后把CDlg1的m_str值又传回主对话框保存起来了
   }
}


在CDlg1的OnInitDialog中把控件的值显示出来
C++">SetDlgItemText(IDC_Text,m_str);

---华软网友回复---
你提供的虽然不是我想要的, 但是任然感谢



引用 16 楼 czyt1988 的回复:
再关闭对话框时把所有值保存在变量里,下次打开对话框显示之前再把这些值赋给对话框不就行了吗!
如CDlgMain是主对话框,CDlg1是弹出对话框,CDlg1有文本编辑框控件IDC_Text。
在CDlgMain中加个变量CString m_strDlg1;CDlg1里面有变量CString m_str。
于是在CDlg1弹出前给CDlg1的m_str赋值

如:
C/C++ code……
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。