Дкелаю следующую вещь — леплю в окошко диалог как child window. Вопрос — можно ли в этом случае настроить переход по контролам по табу ?
Здравствуйте, Аноним, Вы писали:
А>Дкелаю следующую вещь — леплю в окошко диалог как child window. Вопрос — можно ли в этом случае настроить переход по контролам по табу ?
здесьАвтор: _nn_
Дата: 24.04.04
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Аноним, Вы писали:
А>>Дкелаю следующую вещь — леплю в окошко диалог как child window. Вопрос — можно ли в этом случае настроить переход по контролам по табу ?
__>здесьАвтор: _nn_
Дата: 24.04.04
Спасибо большое, то что надо
Никогда бы сам не додумался
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Аноним, Вы писали:
А>>Дкелаю следующую вещь — леплю в окошко диалог как child window. Вопрос — можно ли в этом случае настроить переход по контролам по табу ?
__>здесьАвтор: _nn_
Дата: 24.04.04
А не могли бы в кратце рассказать почему так работает а без этого не работает ?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, _nn_, Вы писали:
__>>Здравствуйте, Аноним, Вы писали:
А>>>Дкелаю следующую вещь — леплю в окошко диалог как child window. Вопрос — можно ли в этом случае настроить переход по контролам по табу ?
__>>здесьАвтор: _nn_
Дата: 24.04.04
А>А не могли бы в кратце рассказать почему так работает а без этого не работает ?
Пожалуйста
Когда вы пишите программу для Windows цикл обработки сообщений выглядит так:
while(GetMessage(...) != NULL) // Получить сообщение
{
TranslateMesage(...); // Преобразует WM_KEYDOWN в WM_CHAR
DispatchMessage(...); // Обработать сообщение.
}
В более высокоуровневых бибилотеках (ATL/WTL) эта часть спрятанна от вас.
Конкретно в WTL реализация находится в CAppModule.
Если вы хотели бы обрабатывать сообщения диалога в С вам нужно было бы вставить IsDialogMessage в цикл.
Следовательно одно решение это отнаследоваться от CAppModule и добавить вызов IsDialogMessage.
Однако проблема в том что это будет распостраняься на все приложение, что не есть хорошо.
Поэтому в WTL есть другой способ: через функцию PreTranslateMessage.
Это специальная функция которая вызывается до основного обработчика сообщений, и мы получаем нужный эффект.
P.S.
Советую вам ознакомиться с статьями о WTL здесь на сайте.
Здравствуйте, _nn_, Вы писали:
__>Пожалуйста
__>Когда вы пишите программу для Windows цикл обработки сообщений выглядит так:
__>__>while(GetMessage(...) != NULL) // Получить сообщение
__>{
__> TranslateMesage(...); // Преобразует WM_KEYDOWN в WM_CHAR
__> DispatchMessage(...); // Обработать сообщение.
__>}
__>
А разве таким образом без IsDialogMessage сообщение нажатия таба не отправится диалоговой процедуре ?
__>В более высокоуровневых бибилотеках (ATL/WTL) эта часть спрятанна от вас.
__>Конкретно в WTL реализация находится в CAppModule.
__>Поэтому в WTL есть другой способ: через функцию PreTranslateMessage.
__>Это специальная функция которая вызывается до основного обработчика сообщений, и мы получаем нужный эффект.
это я уже поисходникам всё выяснил
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, _nn_, Вы писали:
__>>Пожалуйста
__>>Когда вы пишите программу для Windows цикл обработки сообщений выглядит так:
__>>__>>while(GetMessage(...) != NULL) // Получить сообщение
__>>{
__>> TranslateMesage(...); // Преобразует WM_KEYDOWN в WM_CHAR
__>> DispatchMessage(...); // Обработать сообщение.
__>>}
__>>
А>А разве таким образом без IsDialogMessage сообщение нажатия таба не отправится диалоговой процедуре ?
Из MSDN:
IsDialogMessage
This function determines whether a message is intended for the specified dialog box and, if it is, processes the message.
Дело в том, что диалог это особый вид окна, поэтому нужна другая обработка.
__>>В более высокоуровневых бибилотеках (ATL/WTL) эта часть спрятанна от вас.
__>>Конкретно в WTL реализация находится в CAppModule.
__>>Поэтому в WTL есть другой способ: через функцию PreTranslateMessage.
__>>Это специальная функция которая вызывается до основного обработчика сообщений, и мы получаем нужный эффект.
А>это я уже поисходникам всё выяснил