powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MFC: обработка Enter в диалоге
3 сообщений из 3, страница 1 из 1
MFC: обработка Enter в диалоге
    #34057724
_traveller_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модальный диалог. Подскажите как отследить какой контрол имел фокус ввода
в момент нажатия Enter.
У меня куча CEdit на диалоге необходимо при нажатии Enter вызывать соответствующий полю ввода обработчик и переместить фокус на следующий
элемент.

Спасибо кто откликнется
...
Рейтинг: 0 / 0
MFC: обработка Enter в диалоге
    #34059543
_traveller_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался. Если кому интересно:

В редакторе ресурсов ставим стиль Multiline.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
#define WM_EDIT_ENTER (WM_USER+ 1 )

class CEditEntr: public CEdit
{
    ...
    DECLARE_MESSAGE_MAP()
    ...
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
    afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
    ...
}

...

BEGIN_MESSAGE_MAP(CEditEntr, CEdit)
    ON_WM_KEYDOWN()
    ON_WM_CHAR()
END_MESSAGE_MAP()

...

void CEditEntr::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // если нажат Enter уведомляем диалог об этом
    if (nChar == VK_RETURN)
        GetParent()->PostMessage(WM_EDIT_ENTER, (WPARAM)GetDlgCtrlID(),  0 );	

    CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CEditClr::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // запрет обработки по умолчанию для Enter
    if (nChar == VK_RETURN) return;

    CEdit::OnChar(nChar, nRepCnt, nFlags);
}

...

// обрабатываем в диалоге

...

BEGIN_MESSAGE_MAP(CDlgTSpg1, CDialog)
    ...
    ON_MESSAGE(WM_EDIT_ENTER, OnEditEnterPressed)
    ...
END_MESSAGE_MAP()

LRESULT CDialog1::OnEditEnterPressed(WPARAM wParam, LPARAM lParam)
{
    switch (wParam)
    ...
    case IDC_EDIT1:
        ...
        break;
    ...
    }
    return  0 ;
}
...
Рейтинг: 0 / 0
MFC: обработка Enter в диалоге
    #34068875
Владимир2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Visual C++ 6.0

авторtraveller_

Хотел по Вашему решению реализовать и у себя,
Но не получается.
Что я сделал:
1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
.	Сзоздал класс с помощью ClassWizard, 
базовым выбрал класс CEdit
class CEditEntr: public CEdit
єтот класс не связан с диалоговім окном, т.к.
нельзя его отріть спомощью
dlg.DoModal();
 2 .	На базе диалогового окна создал 
class CDialog1 : public CDialog
В этом окне поместил  10  контролов типа CEdit
 3 .	WM_CHAR and WM_KEYDOWN в классе 
class CEditEntr: public CEdit
 4 .	пользовательское сообщение поместил в stdafx.h
#define WM_EDIT_ENTER (WM_USER+ 1 )
поместил
 5 .	В class CDialog1 : public CDialog поместил
LRESULT CDialog1::OnEditEnterPressed(WPARAM wParam, LPARAM lParam)
Добавил как функцию ( метод). С окном нельзя связать, с CEdit тоже нет события. Наверное поэтому и пользовательское.
LRESULT CDialog1::OnEditEnterPressed(WPARAM wParam, LPARAM lParam)
{
	 switch (wParam)
	 {
    case IDC_EDIT1:
        MessageBox("Не сработало");
        break;
    
    }
    return  0 ;
}
СПАСИБО
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / MFC: обработка Enter в диалоге
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]