查了很多资料,都说DoModal()返回值为OK或CANCEL键的ID
其实,这种说法是错误的
MSDN是这样说明其返回值的
If successful, the value of the nRetCode parameter specified in the call toEndDialog; otherwise, -1.
如果操作成功,其返回值为由EndDialog指定的nRetCode的值,而此参数nRetCode的含义为关闭对话框所采用的方式
也就是说,在关闭此模态对话框时,其返回值为关闭对话框时所采用的方式
因此它只在对话框关闭时才返回相关参数值
默认对话框关闭方式有2种:OnOK(); OnCancel()
当使用OnOK()函数关闭对话框时,返回值为IDOK
当使用OnCancel()函数关闭对话框时,返回值为IDCANCEL
返回值与ID无关
比如一个按钮的ID为IDC_BUTTON1
在此按钮的处理函数中添加关闭对话框方式: OnOk()
则 点击此按钮时,对话框返回值为IDOK
除此两种默认关闭方式外,还可用EndDialog(int nRetCode)设定自定义的关闭方式
如下例子:
- void EndDialog(
- int nResult
- );
-
- Parameters
-
- nResult
-
- Contains the value to be returned from the dialog box to the caller of DoModal.
-
- Remarks
-
- This member function returns nResult as the return value of DoModal. You must use the EndDialog function to complete processing whenever a modal dialog box is created.
-
- You can call EndDialog at any time, even in OnInitDialog, in which case you should close the dialog box before it is shown or before the input focus is set.
-
- EndDialog does not close the dialog box immediately. Instead, it sets a flag that directs the dialog box to close as soon as the current message handler returns.
-
-
-
-
-
- Example
-
- /* MyWnd.cpp */
- #include "MyDialog.h"
-
- void CMyWnd::ShowDialog()
- {
- CMyDialog myDlg;
- int nRet = myDlg.DoModal();
-
- if ( nRet == IDOK || nRet == 5 )
- AfxMessageBox("Dialog closed successfully");
- }
-
- /* MyDialog.cpp */
- void CMyDialog::OnSomeAction()
- {
- // Do something
-
- int nRet = 5; // Just any value would do!
- EndDialog(nRet); // This value is returned by DoModal!
-
- // Do something
-
- return; // Dialog closed and DoModal returns only here!
- }
在工程中遇到这样的问题
一个模态对话框 有三个按钮
分别是ONOK() ONCANCEL() EndDialog(0XFF)
但是发现 当按模态对话框右上角的叉号关闭对话框时
总是跳到ONCANCEL()关闭对话框时相同的处理方法
推断: 点击叉后 它默认也是ONCANCEL关闭窗口
解决方法: 因为叉响应WM_COLOSE消息 因此为它创建一个关闭方式
- void WeiKuangKe::OnClose()
- {
- // TODO: Add your message handler code here and/or call default
-
- int nRet=5;
- EndDialog(nRet);
-
- }
转自:http://blog.csdn.net/shuilan0066/article/details/5775383
参考资料:
http://technet.microsoft.com/zh-cn/office/wddd3ztw%28VS.80%29.aspx
|