没有合适的资源?快使用搜索试试~ 我知道了~
首页OnOK OnCancel OnClose OnDestroy 详解
OnOK OnCancel OnClose OnDestroy 详解
需积分: 50 8 下载量 106 浏览量
更新于2023-03-16
评论
收藏 286KB PDF 举报
OnOK OnCancel OnClose OnDestroy
资源详情
资源评论
资源推荐
关于 OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框
总结 OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
2009 年 09 月 22 日 下午 08:33
第一,OnOK()和 OnCancel()是 CDialog 基类的成员函数,而 OnClose()和 OnDestroy()
是 CWnd 基类的成员函数,即 WM 消息响应函数。从应用程序结构的角度,拿对话框来说,红
色的 X 对应的是 CWnd,而处于对话框中的“确定”、“取消”按钮则对应了 CDialog。
第二,OnClose()和 OnDestroy()
在单视图程序中,根据<<深入浅出 MFC>>所讲,程序退出时执行的操作顺序为(从点 X 按钮开
始)
(1)用户点击 X 退出按钮,发送了 WM_CLOSE 消息----->响应 OnClose()
(2)在 WM_CLOSE 消息的处理函数中,调用 DestroyWindow()----->销毁与指定 CWnd 窗口
对象关联的窗口,但未销毁 CWnd 对象
(3)在 DestroyWindow()中发送了 WM_DESTROY 消息----->窗口销毁后响应 OnDestroy()
(4)在 WM_DESTROY 消息中调用 PostQuitMessage(),发送 WM_QUIT 消息,结束消息循环
可以看到,程序的退出过程,是先响应 OnClose(),然后响应 OnDestroy(),在响应 OnDestroy()
之前,窗口对象已经被销毁。OnDestroy()到底干了什么呢?它就像一个 teller,先通知 CWnd
对象告诉它即将被销毁,尔后 OnDestroy 的真正运行是在 CWnd 对象已经从屏幕上清除以后
被调用的。
第三,OnOK()、OnCancel()()、OnClose()、OnDestroy()
CDialog::OnOK 首先调用 UpdateData(TRUE)将数据传给对话框成员变量,然后调用
CDialog::EndDialog 关闭对话框;
CDialog::OnCancel 只调用 CDialog::EndDialog 关闭对话框;
OnClose()是响应 WM_CLOSE 的.一定程度上可以说 CDialog::EndDialog()和
OnClose()完成类似的工作,但处理的机制不一样,前者是 CDialog 的对象机制,后者是 WM
的消息映射机制。
CDialog::EndDialog()-------->OnDestroy()
OnClose()-------->OnDestroy()
EndDialog()和 OnClose()属于“同级别”的,所以我们在按下 OK 按钮的时候,程序是不会执
行 OnClose()的,但两种机制都必须经过 OnDestroy()
本文来自 CSDN 博客,转载请标明出处:
http://blog.csdn.net/wind1987321/archive/2009/09/21/4576585.aspx
然后发现
下面这两种说法不明晰
(1) EndDialog(-1);
关闭模态对话框,并且将参数作为父对话框调用的返回值。
(2) DestroyWindow(); ::PostQuitMessage(0);
DestroyWindow 关闭非模态对话框。 退出消息循环,真正结束进程。有不少程序窗口关闭,
但是不等于退出运行。
cDialog::onok(),enddialog(),destroywindow 区别。
收藏
模式和无模式对话的中止是不一样的:模式对话通过调用 CDialog : : EndDialog 来中止,无
模式对话则是调用 CWnd: : DestroyWindow 来中止的,函数 CDialog : : OnOK 和
CDialog : : OnCancel 调用 EndDialog ,所以需要调用 DestroyWindow 并重置无模式对话
的函数。
最后三个还不错
Windows API 一日一练(18)EndDialog 函数 收藏
上一次介绍了怎么样显示对话框的函数,那么怎么样关闭对话框呢?这就需要使用到函数
EndDialog。这个函数只能在对话框的消息处理函数里使用,并且这个函数调用之后,没有立
即就删除对话框的,而是设置了操作系统里的结束标志。当操作系统查检到有这个标志时,就去
删除对话框的消息循环,同时也去释放对话框占用的资源。其实对话框的生命周期是这样的,先
由函数 DialogBox 创建对话框,这样函数 DialogBox 完成创建对话框但还没有显示前会发出
消息 WM_INITDIALOG,让对话框有机会初始化上面所有窗口或控件的显示,比如设置文本框
的字符串等。最后当用户点出确定或者取消的按钮,就收到两个命令 IDOK 或 IDCANCEL,这
时就可以调用函数 EndDialog 来结束对话框的生命。
函数 EndDialog 声明如下:
WINUSERAPI
BOOL
WINAPI
EndDialog(
__in HWND hDlg,
__in INT_PTR nResult);
hDlg 是对话框窗口的句柄。
nResult 是设置给函数 DialogBox 的返回值。
调用这个函数的例子如下:
#001 // 显示关于对话框。
#002 //
#003 // 蔡军生 2007/07/12
#004 //
#005 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam,
LPARAM lParam)
#006 {
#007 UNREFERENCED_PARAMETER(lParam);
#008 switch (message)
#009 {
#010 case WM_INITDIALOG:
#011 return (INT_PTR)TRUE;
#012
#013 case WM_COMMAND:
#014 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
#015 {
#016 EndDialog(hDlg, LOWORD(wParam));
#017 return (INT_PTR)TRUE;
#018 }
#019 break;
#020 }
#021 return (INT_PTR)FALSE;
#022 }
第 16 行就是调用函数 EndDialog 来关闭对话框。
本文来自 CSDN 博客,转载请标明出处:
http://blog.csdn.net/caimouse/archive/2007/07/30/1716140.aspx
非模式对话框
2009-03-23 17:10
1、非模式对话框的打开:
// 弹出无模式对话框
CDevPproperty *pDlg= new CDevPproperty;
pDlg->Create(IDD_DEV_PROPERTY,GetDesktopWindow());
// 填充设备属性,用 SetDlgItemInt()时就不用再定义一个 CString来将数据转换成字符串
了
pDlg->SetDlgItemInt(IDC_EDT_DEV_ID,i,TRUE);
// 为了实现向组合框发送选项,而又不想定义变量,所以这里用了消息传递
pWnd=pDlg->GetDlgItem(IDC_CMB_DEV_STATUS);
pWnd->SetFocus(); // 设置对话框中的焦点
pWnd->SendMessage(CB_SETCURSEL,CDeviceInfo[i].status,0);
// 显示窗口
pDlg->ShowWindow(SW_SHOW);
剩余18页未读,继续阅读
scg08
- 粉丝: 10
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0