Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alex_lv
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 8
#1

Перемещение по множеству EDITов - C++

26.02.2008, 22:08. Просмотров 844. Ответов 6
Метки нет (Все метки)

Проблема такая:
У меня на окне(не диалог!) много EDITов, мне надо между ними перемещаться желательно стрелками и ENTER. Для этого мне нужно занать какие клавиши нажимаются во время ввода текста в EDIT, но сообщения WM_KEY... and WM_CHAR кудато уходят мимо моего switch(msg).
На диалоговом окне хоть TAB работает но мне это неподходит.
Подскажите где мне их ловить или другой способ.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2008, 22:08     Перемещение по множеству EDITов
Посмотрите здесь:

C++ Сумма элементов массива, принадлежащих множеству
Множества set, проверка принадлежности множеству C++
Определить, принадлежит ли указанное число множеству 10 чисел C++
Принадлежность множеству C++
Принадлежность данной точки выделенному множеству C++
Перемещение курсора C++
C++ Как определить принадлежность точки к некому множеству(функции) в C++ ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
2460 / 1682 / 216
Регистрация: 08.06.2007
Сообщений: 6,629
Записей в блоге: 4
27.02.2008, 20:39     Перемещение по множеству EDITов #2
Оконная функция при создании контрола должна корректно обработать сообщение WM_GETDLGCODE, вернув значение DLGC_WANTARROWS или даже DLGC_WANTALLKEYS. Сам я это не пробовал, но если верить MSDN...
alex_lv
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 8
27.02.2008, 23:51  [ТС]     Перемещение по множеству EDITов #3
Спасибо!
Сам бы никогда не нашел!
Конечно с виду сложновато но поробую осилить.
alex_lv
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 8
01.03.2008, 19:02  [ТС]     Перемещение по множеству EDITов #4
Покрутил я этот WM_GETDLGCODE и ничего уменя не получилось.
Может кто примерчик вышлет или более подробно.
palva
2460 / 1682 / 216
Регистрация: 08.06.2007
Сообщений: 6,629
Записей в блоге: 4
06.03.2008, 23:02     Перемещение по множеству EDITов #5
Мой первый ответ, похоже, был из другой оперы. Не разобрался сразу.

Вам надо подменить оконную функцию стандартного контрола своей, в ней написать нужную обработку сообщений от клавиатуры и закончить ее обращением к стандартной функцией. Вот фрагмент работающего проекта:

typedef LRESULT (CALLBACK *PFNWP)(HWND, UINT, WPARAM, LPARAM);
PFNWP pWinProc;

LRESULT CALLBACK EditWindowProc(HWND hWnd, UINT Message,
WPARAM wParam, LPARAM lParam) { // Оконная функция для EDIT
switch(Message) {
case WM_KEYDOWN:
MessageBox(0,'Нажато','',0);
}
return pWinProc(hWnd, Message, wParam, lParam);
}

LRESULT CALLBACK MainWindowProc(HWND hWnd, UINT Message,
WPARAM wParam, LPARAM lParam) { // Оконная функция для главного окна
HWND ed1;
switch(Message) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
ed1=CreateWindow('EDIT','',
ES_LEFT|WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP,
24,40,122,24,hWnd, (HMENU)101,hInstance,NULL);
pWinProc=(PFNWP)SetWindowLong(ed1, GWL_WNDPROC,
(long)EditWindowProc);
break;
}
return DefWindowProc(hWnd, Message, wParam, lParam);
}

Здесь контрол создается вручную, но та же технология применима и при использовании диалога.

С новым Годом.
alex_lv
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 8
10.03.2008, 00:03  [ТС]     Перемещение по множеству EDITов #6
Огромное Спасибо!
Всех С Новым Годом!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2008, 19:08     Перемещение по множеству EDITов
Еще ссылки по теме:

C++ Перемещение элемента
Не могу добавить объект к множеству C++
C++ Принадлежит ли точка множеству точек плоскости
Алгоритм поиск по множеству C++
C++ Перемещение змейки

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
palva
2460 / 1682 / 216
Регистрация: 08.06.2007
Сообщений: 6,629
Записей в блоге: 4
13.03.2008, 19:08     Перемещение по множеству EDITов #7
Я опять не вполне разобрался в вопросе. Оказывается, этот метод называется сабклассинг. Имеется специальный стандартный
тип WNDPROC для оконной функции, а для вызова оконной функции предназначена функция CallWindowProc.

С учетом всего этого пример выглядит уже не таким самодельным:

WNDPROC pWinProc;

LRESULT CALLBACK EditWindowProc(HWND hWnd, UINT Message,
WPARAM wParam, LPARAM lParam) {
switch(Message) {
case WM_KEYDOWN:
MessageBox(0,'Íàæàòî','',0);
}
return CallWindowProc(pWinProc, hWnd, Message, wParam, lParam);
}

LRESULT CALLBACK MainWindowProc(HWND hWnd, UINT Message,
WPARAM wParam, LPARAM lParam) {
HWND ed1;
switch(Message) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
ed1=CreateWindow('EDIT','',
ES_LEFT|WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP,
24,40,122,24,hWnd, (HMENU)101,hInstance,NULL);
pWinProc=(WNDPROC)SetWindowLong(ed1, GWL_WNDPROC,
(long)EditWindowProc);
break;
}
return DefWindowProc(hWnd, Message, wParam, lParam);
}

Век живи - век учись (дураком помрешь)
Yandex
Объявления
13.03.2008, 19:08     Перемещение по множеству EDITов
Ответ Создать тему
Опции темы

Текущее время: 00:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru