MFC: Dialog based

  • Автор темы solova
  • Дата начала
S

solova

#1
создаю проект MFC:
Application Type :Dialog based
\Finish
и по дэфу создаётся окно с двумя кнопками OK и Cancel
при дебаге открывается окно и при нажатии на эти кнопки или (Esc) приложение закрывается
в файлах приложения обработку нажатия этих кнопок я не нашёл
только в MyDialog.cpp (не MyDialogDlg.cpp) мне предлагают написать обработку для них<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
C++:
CMyDialogDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
но обработки пустые и никаких PostQuitMessage() нету
так как же нажатие на эти кнопки обрабатывается, то есть где
Как избавиться от этих кнопок(просто удалить?) так чтоб ни одной строчки кода от них не осталось(я про тот код который закрывает приложение)
И кстати как избавится от закрывания после нажатия на Esc, хук что ли ставить на клаву?
PS:я ставил ещё одну кнопку и менял ИД на IDOK, а на кнопке ОК , IDYES, так вот на нажатие на свою кнопку(IDОК) приложение закрывалось , а на кнопку ОК(IDYES) нет. Так как эти ID задефендены в winuser.h, я решил что происходит дефалтная обработка кнопок с этими ИД . Но нет программа реагирует только на IDOK и IDCANCEL, и я решил что значит где-то код для них есть.
 
S

solova

#2
Вот код, работает, на esc и enter не реагирует (что и надо), но правильно ли там всё например break-и нужны или так нормально будет(чтоб в дальнейшем ошибки при работе проги не выскакивали)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
C++:
//CMyDlg.cpp
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
switch ( pMsg->message)
{
case WM_KEYDOWN:
switch( pMsg->wParam)
{
case VK_RETURN: return true;
case VK_ESCAPE: return true;
default:		return false;
}
default: return false;
}
return CMyDlg::PreTranslateMessage(pMsg);
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#3
Break-и не нужны, return-ы их заменяют.

Добавлено: Думаю так будет правильнее:
C++:
		switch ( pMsg->wParam ) {
case VK_RETURN: return true;
case VK_ESCAPE: return true;
}
break;