Приложение Dialog based на основе MFC
От: lexer_lx Украина  
Дата: 10.06.03 08:22
Оценка:
Подскажите плиз — как можно, особо не извращаясь,
отловить нажатие ESC и ENTER, чтоб не завершать по ним прогу?
Под особым извращением я понимаю установку хука
Посредством DefWindowProc, OnSysCommand и т.д. — не получается
(может я не так что-то делаю ?:
LRESULT CArchiveServerDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_SYSKEYDOWN) { // или message == WM_KEYDOWN

}

return CDialog::DefWindowProc(message, wParam, lParam);
}
)

10.06.03 13:15: Перенесено из 'Сети, сокеты, протоколы'
Re: Приложение Dialog based на основе MFC
От: Дмитрий Наумов  
Дата: 10.06.03 08:26
Оценка:
Здравствуйте, lexer_lx, Вы писали:

LL>Подскажите плиз — как можно, особо не извращаясь,

LL>отловить нажатие ESC и ENTER, чтоб не завершать по ним прогу?
LL>Под особым извращением я понимаю установку хука
LL>Посредством DefWindowProc, OnSysCommand и т.д. — не получается
LL>(может я не так что-то делаю ?:
LL> LRESULT CArchiveServerDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
LL> {
LL> if (message == WM_SYSKEYDOWN) { // или message == WM_KEYDOWN

LL> }


LL> return CDialog::DefWindowProc(message, wParam, lParam);

LL> }
LL>)

Если у тебя, как ты пишешь в теме, MFC диалог, то достаточно переопределить методы OnOk и OnCancel и в не вызывать методы родителя (CDialog)
... << RSDN@Home 1.0 beta 6a >>
Re: Приложение Dialog based на основе MFC
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.06.03 08:27
Оценка:
Здравствуйте, lexer_lx, Вы писали:

_>Подскажите плиз — как можно, особо не извращаясь,

_>отловить нажатие ESC и ENTER, чтоб не завершать по ним прогу?

добавить обработчики OnOK и OnCancel и убрать из них вызов CDialog::OnOK() и CDialog::OnCancel() соответственно
Re[2]: Приложение Dialog based на основе MFC
От: lexer_lx Украина  
Дата: 10.06.03 10:35
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Здравствуйте, lexer_lx, Вы писали:


LL>>Подскажите плиз — как можно, особо не извращаясь,

LL>>отловить нажатие ESC и ENTER, чтоб не завершать по ним прогу?
LL>>Под особым извращением я понимаю установку хука
LL>>Посредством DefWindowProc, OnSysCommand и т.д. — не получается
LL>>(может я не так что-то делаю ?:
LL>> LRESULT CArchiveServerDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
LL>> {
LL>> if (message == WM_SYSKEYDOWN) { // или message == WM_KEYDOWN

LL>> }


LL>> return CDialog::DefWindowProc(message, wParam, lParam);

LL>> }
LL>>)

ДН>Если у тебя, как ты пишешь в теме, MFC диалог, то достаточно переопределить методы OnOk и OnCancel и в не вызывать методы родителя (CDialog)


Уважаемый Дмитрий!
Приношу извинения за не совсем точную формулировку вопроса.
Мне нужно, чтобы диалог не закрывался по ESC, но чтоб его можно было закрыть, нажав на крестик!!!
Если убрать OnCancel, то приложение можно будет закрыть только exit'ом.
В принципе, я уже сделал посредством хука, но все таки это изврат
Re[2]: Приложение Dialog based на основе MFC
От: lexer_lx Украина  
Дата: 10.06.03 10:38
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, lexer_lx, Вы писали:


_>>Подскажите плиз — как можно, особо не извращаясь,

_>>отловить нажатие ESC и ENTER, чтоб не завершать по ним прогу?

OE>добавить обработчики OnOK и OnCancel и убрать из них вызов CDialog::OnOK() и CDialog::OnCancel() соответственно


Уважаемый Алексей!
Приношу извинения за неполноценную формулировку вопроса.
Мне надо чтоб осталась реакция на нажатие крестика в заголовке окна!
Ведь ее не будет если убрать OnCancel.
В принципе я уже сделал хук, все прекрасно работает — но это изврат
Нет ли более элегантного решения ?

С уважением, lexer_lx
Re[3]: Приложение Dialog based на основе MFC
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 10.06.03 10:41
Оценка: +1
Здравствуйте, lexer_lx, Вы писали:

_>В принципе я уже сделал хук, все прекрасно работает — но это изврат

_>Нет ли более элегантного решения ?

Обработать WM_CLOSE, вызвав из него EndDialog().
- Искренне ваш, Поросенок Пафнутий
Re: Приложение Dialog based на основе MFC
От: andrev2 Украина  
Дата: 10.06.03 13:02
Оценка:
Здравствуйте, lexer_lx, Вы писали:

_>Подскажите плиз — как можно, особо не извращаясь,

_>отловить нажатие ESC и ENTER, чтоб не завершать по ним прогу?

#define NOT_USED 0

BOOL CSomeDlg::PreTranslateMessage
(
IN MSG* pMsg
)
{
if((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE))
{
HWND hWnd = ::GetFocus();

if(::IsChild(m_hWnd, hWnd))
{
LRESULT lr = ::SendMessage(hWnd, WM_GETDLGCODE, NOT_USED, NULL);

if(lr & (DLGC_WANTALLKEYS | DLGC_WANTCHARS))
{
::SendMessage(hWnd, WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
}
}

return TRUE;
}

return baseCSomeDlg::PreTranslateMessage(pMsg);
}
ЧИТАЙТЕ МАНЫ, ОНИ — РУЛЕЗ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.