زدن Esc باعث ارسال فرمان IDCANCEL و زدن Enter باعث ارسال فرمان IDOK میشه. اگه از MFC استفاده کردید بطور پیش فرض کادر تبادلی بسته خواهد شد (استاندارد ویندوز هم همینه).
مثلاْ توی OnOK و OnCancel یه چیزی شبیه این داریم:
void CMyDialog::OnOK()
{
CDialog::OnOK();
}
void CMyDialog::OnCancel()
{
CDialog::OnCancel();
}
در هر دو مورد توابع کلاس پایه فراخوانی میشن که این توابع بعد از انجام یک سری کارها در انتها کادر تبادلی رو با EndDialog می بندند. با حذف اونها میشه جلو بسته شدن کادر تبادلی رو گرفت. (در مورد ریز کارهایی که این توابع انجام میدن به فایلهای منبع MFC مراجعه کنید):
void CMyDialog::OnOK()
{
}
void CMyDialog::OnCancel()
{
}
حالا یه مشکل باقی می مونه. کادر تبادلی به هیچوجه بسته نمی شه. حتی اگه دکمه close رو بزنی. برای حلش پیغام WM_SYSCOMMAND رو اینجوری می نویسیم:
void CMyDialog::OnSysCommand(UINT nID, LPARAM lParam)
{
if (nID == SC_CLOSE)
{
EndDialog(IDCANCEL);
}
else
CDialog::OnSysCommand(nID, lParam);
}