Страница 1 из 1

MFC Контролы

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

Добавлено: 16 окт 2005, 12:25
Lev
Любое сообщение можно перехватить через переопределенную 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.

Добавлено: 17 окт 2005, 14:02
WinMain
На самом деле здесь совсем не нужно перехватывать и обрабатывать сообщения от клавиатуры. Класс окна диалога сам всё это делает. Нужно лишь правильно задать стиль создаваемых дочерних элементов и назначить им идентификаторы. Стиль каждого элемента окна диалога должен иметь флаг WS_TABSTOP. У каждого элемента диалога (кроме "STATIC") должен быть свой уникальный идентификатор.

Добавлено: 18 окт 2005, 13:30
Romeo
Также имеет значение 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;
	}

Добавлено: 18 окт 2005, 16:13
Alezis
Спасибо всем буду юзать. Тема закрыта.