在VC中调用OnOK()为什么不会关闭对话框,

在VC中调用OnOK()为什么不会关闭对话框,,第1张

OnOK没有运行完成的话,窗口是不会消失的。

但是OnOK完成的话,窗口就关闭了,和对话框程序的框架是冲突的

我的理解是,你现在需要一个这样的程序,即使主窗口不在了它也能正确运行。

基于Dialog的程序框架不修改的话是无法满足这个要求,因为这个框架下,一旦主窗口被销毁,程序就退出了

修改程序框架,使得主窗口销毁以后程序还能继续运行,修改程序启动时入口点的DoModal,以及修改另一个对话框的打开方式(不用DoModal打开),手动添加消息循环

修改对话框关闭时的行为(正常情况下对话框关闭使得DoModal返回,现在要在需要退出程序的时候抛出WM_QUIT,否则消息循环不会结束,程序也无法退出。

要注意的地方就是,所有可能会导致“最后一个对话框消失”的地方,都要加上AfxPostQuitMessage,否则程序就会无法正常退出

全工程搜索“注意这里”四个字,可以看到我特别加上的注释

其他地方DoModal还是可以用的,归纳一下是,

DoModal函数在对话框关闭之前不会返回,

第一个不知道你想表达什么,第二默认的焦点的确是OnOK上,第三,重载 OnOk函数的意义在与你关闭对话框时刻,可以自己处理一些 *** 作,,比如,默认对话框OnOk函数是关闭对话框,你可以让他不关闭他,只需要写一个空的OnOk函数就可以了。

CDlg当中对应加自己的私有成员变量。对应Dlg上得控件,有方法用类向导,直接给其对应一个变量。或者自己手动添加也行。

CDlg中有CString私有成员之后,规范就是给出一个公有函数方法getString(CString& )向外提供数据

如下在CViewcpp中部分实现过程:

CDlg dlg;

CString str;

if(dlgDomodel() && dlgOnOk() == IDOK)

{

dlggetString (str); //这里就得出其数据,其中str也可以声明到CView类当中作为一个成员变量

}

当然,不那么麻烦就是都声明为公有成员变量,访问。这个不是很好的习惯

希望对你有帮助

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12177929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存