MFC Контролы

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

MFC, CFormView Создаются дин. эдиты , т.е CreateWindow.
Как назначить переходы по этим эдитампо нажатию кнопки TAB, т.е как перехватывать нажатие TAB чтобы потом я сам кстанавливал фокус на соответствующий контрол. Как то переопределять функции классов фрейма и представления не получается, а обработка WM_KEYDOWN вообўе по ходу не заходит, по крайней мере в представлениии.
Lev
Сообщения: 45
Зарегистрирован: 14 фев 2005, 11:17

Любое сообщение можно перехватить через переопределенную CWnd::OnWndMsg() (в крайнем случае).
Platform SDK Documentation:
The DefWindowProc function examines the specified key and generates a WM_SYSCOMMAND message if the key is either TAB or ENTER.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

На самом деле здесь совсем не нужно перехватывать и обрабатывать сообщения от клавиатуры. Класс окна диалога сам всё это делает. Нужно лишь правильно задать стиль создаваемых дочерних элементов и назначить им идентификаторы. Стиль каждого элемента окна диалога должен иметь флаг WS_TABSTOP. У каждого элемента диалога (кроме "STATIC") должен быть свой уникальный идентификатор.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Также имеет значение tab order создаваемых динамически контролов. После создания контролов можно программно поменять tab order с помощью следующего несложного приёма:

Код: Выделить всё

	static UINT controls[] = {
								IDC_STATIC_LOOKIN,
								IDC_COMBO_LOOKIN,
								IDC_TOOLBAR, 
								IDC_FOLDERVIEW,
								IDC_STATIC_FILENAME,
								IDC_EDIT_FILENAME,
								IDC_STATIC_FILETYPES,
								IDC_COMBO_FILETYPES,
								0
							};

	int i = 0;
	HWND hWndInsertAfter = HWND_TOP;
	while (controls[i] != 0)
	{
		HWND hWnd = GetDlgItem(controls[i]);
		::SetWindowPos(hWnd, hWndInsertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
		hWndInsertAfter = hWnd;
		++i;
	}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

Спасибо всем буду юзать. Тема закрыта.
Ответить