MFC, CFormView Создаются дин. эдиты , т.е CreateWindow.
Как назначить переходы по этим эдитампо нажатию кнопки TAB, т.е как перехватывать нажатие TAB чтобы потом я сам кстанавливал фокус на соответствующий контрол. Как то переопределять функции классов фрейма и представления не получается, а обработка WM_KEYDOWN вообўе по ходу не заходит, по крайней мере в представлениии.
MFC Контролы
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Любое сообщение можно перехватить через переопределенную CWnd::OnWndMsg() (в крайнем случае).
Platform SDK Documentation:
Platform SDK Documentation:
The DefWindowProc function examines the specified key and generates a WM_SYSCOMMAND message if the key is either TAB or ENTER.
На самом деле здесь совсем не нужно перехватывать и обрабатывать сообщения от клавиатуры. Класс окна диалога сам всё это делает. Нужно лишь правильно задать стиль создаваемых дочерних элементов и назначить им идентификаторы. Стиль каждого элемента окна диалога должен иметь флаг 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" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Спасибо всем буду юзать. Тема закрыта.