Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Событие KeyDown

6.1K
06 сентября 2004 года
Kitty
16 / / 02.09.2004
Добрый день!

У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?
302
06 сентября 2004 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by Kitty
Добрый день!

У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?


У тебя тип сборки какой? Debug или Release?

6.1K
06 сентября 2004 года
Kitty
16 / / 02.09.2004
Цитата:
Originally posted by Sagittarius

У тебя тип сборки какой? Debug или Release?


Debug видимо.

302
06 сентября 2004 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by Kitty
Добрый день!

У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?


Событие у окна диалога? А ты уверен, что до него доходят сообщения о нажатии клавиш после их обработки в RichEdit???

6.1K
06 сентября 2004 года
Kitty
16 / / 02.09.2004
Цитата:
Originally posted by Sagittarius

Событие у окна диалога? А ты уверен, что до него доходят сообщения о нажатии клавиш после их обработки в RichEdit???


На сколько я знаю, сообщения типа keyDown обрабатываются окном. Через ClassWizard я не могу это сообщение ни к чему кроме как к диалогу привинтить. Так как в функцию обработки я не попадаю, следовательно сообщения до окна не доходят. Но вот почему ..?

6.0K
06 сентября 2004 года
cozy dude
7 / / 10.01.2004
Тебе нужно субклассить твой эдит таким образом:

1. Создаешь новый класс, производный от CEdit - CTabEdit(к примеру)
2. Делаешь в нем обработчик WM_CHAR:
 
Код:
void CTabEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
   if(nChar == VK_TAB)
      SendMessage((WPARAM)VK_TAB), (LPARAM)4);
   else
      CEdit::OnChar(nChar, nRepCnt, nFlags);
//Здесь я не уверен - подправь если что
}

3. В заголовке класса диалогового окна добавь переменную нового класса
CTabEdit m_tabEdit;
4. В OnInitDialog твоего диалога добавь:
m_tabEdit.SubclassDlgItem(IDC_EDIT1, this)
//Вместо IDC_EDIT1 - идентификатор твоего эдита
6.1K
06 сентября 2004 года
Kitty
16 / / 02.09.2004
Цитата:
Originally posted by cozy dude
Тебе нужно субклассить твой эдит таким образом:

1. Создаешь новый класс, производный от CEdit - CTabEdit(к примеру)
2. Делаешь в нем обработчик WM_CHAR:
 
Код:
void CTabEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
   if(nChar == VK_TAB)
      SendMessage((WPARAM)VK_TAB), (LPARAM)4);
   else
      CEdit::OnChar(nChar, nRepCnt, nFlags);
//Здесь я не уверен - подправь если что
}

3. В заголовке класса диалогового окна добавь переменную нового класса
CTabEdit m_tabEdit;
4. В OnInitDialog твоего диалога добавь:
m_tabEdit.SubclassDlgItem(IDC_EDIT1, this)
//Вместо IDC_EDIT1 - идентификатор твоего эдита


Спасибо большое, работает!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог