Preventing "Return" and "Esc" From Closing Dialog

来源:互联网 发布:淘宝图片助手官方 编辑:程序博客网 时间:2024/06/01 10:42

Introduction


A dialog-based application by default will close when the user hits
Return, Esc, File -> Close, or the "X" in the system menu (top right
of dialog/window). If your app is complicated and doesn't have an OK
and/or Cancel button in the main window of the app, the user may be
surprised when he hits Return (or Esc) accidentally and the app closes
on him. Imagine if you were using MS Word and it closed when you hit
the "Return" key, especially if you hadn't saved hours of work. Pretty
upsetting.


I wanted my app to close only when the user clicked the "X" in the
system menu or selected the File-> Close (or Exit) menu item.


The solution is simple.



//Disable OnCancel

void MyDialog::OnCancel()
{
}

//Disable OnOK

void MyDialog::OnOK()
{
}

//message map event handler executed when user selects the File Ext menu

item
void MyDialog::OnFileClose()
{
EndDialog(IDOK);
}

void MyDialog::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout; //if you have an about dialog


dlgAbout.DoModal();
}
//add the following code

else if ((nID & 0xFFF0) == SC_CLOSE)
{
//if user clicked the "X"

EndDialog(IDOK); //Close the dialog with IDOK (or IDCANCEL)

//---end of code you have added

}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}