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

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

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

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

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

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

Принадлежность множеству - C++
На дельфи есть прекрасный оператор IN, который проверяет принадлежность множуству (я это так называю) То есть if Key IN then ... А...

Алгоритм поиск по множеству - C++
Добрый вечер. Какой алгоритм поиска используется в контейнере <set>?

Не могу добавить объект к множеству - C++
У меня есть функция, которая должна добавить объект в множество которое передается как параметр Была такая, но объект не добавляла: ...

Сумма элементов массива, принадлежащих множеству - C++
Помогите пожалуйста, как найти сумму элементов массива, принадлежащих множеству (-oo, A] U (B,+oo) где А и В индексы двух элементов.

Принадлежность данной точки выделенному множеству - C++
Здравствуйте, уважаемые программисты! Помогите с решением одной задачи. Надо узнать, принадлежит ли данная точка выделенным...

Принадлежит ли точка множеству точек плоскости - C++
Принадлежность точки множеству Составить программу, которая определяет, принадлежит ли точка Z(X,Y) множеству точек плоскости, произведение...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
palva
2614 / 1836 / 263
Регистрация: 08.06.2007
Сообщений: 6,995
Записей в блоге: 4
27.02.2008, 20:39 #2
Оконная функция при создании контрола должна корректно обработать сообщение WM_GETDLGCODE, вернув значение DLGC_WANTARROWS или даже DLGC_WANTALLKEYS. Сам я это не пробовал, но если верить MSDN...
0
alex_lv
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 8
27.02.2008, 23:51  [ТС] #3
Спасибо!
Сам бы никогда не нашел!
Конечно с виду сложновато но поробую осилить.
0
alex_lv
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 8
01.03.2008, 19:02  [ТС] #4
Покрутил я этот WM_GETDLGCODE и ничего уменя не получилось.
Может кто примерчик вышлет или более подробно.
0
palva
2614 / 1836 / 263
Регистрация: 08.06.2007
Сообщений: 6,995
Записей в блоге: 4
06.03.2008, 23:02 #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);
}

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

С новым Годом.
0
alex_lv
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 8
10.03.2008, 00:03  [ТС] #6
Огромное Спасибо!
Всех С Новым Годом!
0
palva
2614 / 1836 / 263
Регистрация: 08.06.2007
Сообщений: 6,995
Записей в блоге: 4
13.03.2008, 19:08 #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);
}

Век живи - век учись (дураком помрешь)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2008, 19:08
Привет! Вот еще темы с ответами:

Множества set, проверка принадлежности множеству - C++
Доброго времени суток, ув. форумчане :) Для лабораторной работы необходимо реализовать множество и выполнять проверку принадлежности...

Определить, принадлежит ли указанное число множеству 10 чисел - C++
визначтити чи належить вказане число множині 10 чисел, Результат вивести на форму Определить, принадлежит ли указанное число множеству 10...

Как определить принадлежность точки к некому множеству(функции) в C++ ? - C++
Функция={y>-6, y<-|x|+5} (система уравнений) Задание: у пользователя запрашиваются координаты различных точек, введённые пользователем...

Заполнение Editов из Грида - Delphi БД
Доброго времени суток!!!! Ребят тут такая проблема у меня произошла.... Объясню по порядку: Есть таблица и несколько Editов...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.03.2008, 19:08
Ответ Создать тему
Опции темы

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