查了不少資料,都說DoModal()返回值爲OK或CANCEL鍵的IDide
其實,這種說法是錯誤的函數
MSDN是這樣說明其返回值的ui
If successful, the value of the nRetCode parameter specified in the call toEndDialog; otherwise, -1.spa
若是操做成功,其返回值爲由EndDialog指定的nRetCode的值,而此參數nRetCode的含義爲關閉對話框所採用的方式.net
也就是說,在關閉此模態對話框時,其返回值爲關閉對話框時所採用的方式code
所以它只在對話框關閉時才返回相關參數值blog
默認對話框關閉方式有2種:OnOK(); OnCancel()ip
當使用OnOK()函數關閉對話框時,返回值爲IDOKci
當使用OnCancel()函數關閉對話框時,返回值爲IDCANCELget
返回值與ID無關
好比一個按鈕的ID爲IDC_BUTTON1
在此按鈕的處理函數中添加關閉對話框方式: OnOk()
則 點擊此按鈕時,對話框返回值爲IDOK
除此兩種默認關閉方式外,還可用EndDialog(int nRetCode)設定自定義的關閉方式
以下例子:
[c-sharp] view plain copy
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消息 所以爲它建立一個關閉方式
[c-sharp] view plain copy
void WeiKuangKe::OnClose()
{
// TODO: Add your message handler code here and/or call default
int nRet=5;
EndDialog(nRet);
}
參考資料:
http://technet.microsoft.com/zh-cn/office/wddd3ztw%28VS.80%29.aspx
轉載自:http://blog.csdn.net/shuilan0066/article/details/5775383