Событие KeyDown
У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?
Цитата:
Originally posted by Kitty
Добрый день!
У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?
Добрый день!
У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?
У тебя тип сборки какой? Debug или Release?
Цитата:
Originally posted by Sagittarius
У тебя тип сборки какой? Debug или Release?
У тебя тип сборки какой? Debug или Release?
Debug видимо.
Цитата:
Originally posted by Kitty
Добрый день!
У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?
Добрый день!
У меня есть диалог, на котором расположен RichTextEdit. Мне необходимо, чтоб при нажатии на Tab в Edit-е, печатались 4 пробела вместо таб. Определено событие ON_WM_KEYDOWN (с пом ClassWizard) у окна диалога и в нем я уже эмулирую нажатия пробелов, но .. в функцию-обработчик OnKeyDown я даже не попадаю( Ставлю там BreakP). Почему?
Событие у окна диалога? А ты уверен, что до него доходят сообщения о нажатии клавиш после их обработки в RichEdit???
Цитата:
Originally posted by Sagittarius
Событие у окна диалога? А ты уверен, что до него доходят сообщения о нажатии клавиш после их обработки в RichEdit???
Событие у окна диалога? А ты уверен, что до него доходят сообщения о нажатии клавиш после их обработки в RichEdit???
На сколько я знаю, сообщения типа keyDown обрабатываются окном. Через ClassWizard я не могу это сообщение ни к чему кроме как к диалогу привинтить. Так как в функцию обработки я не попадаю, следовательно сообщения до окна не доходят. Но вот почему ..?
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);
//Здесь я не уверен - подправь если что
}
{
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 - идентификатор твоего эдита
Цитата:
Originally posted by cozy dude
Тебе нужно субклассить твой эдит таким образом:
1. Создаешь новый класс, производный от CEdit - CTabEdit(к примеру)
2. Делаешь в нем обработчик WM_CHAR:
3. В заголовке класса диалогового окна добавь переменную нового класса
CTabEdit m_tabEdit;
4. В OnInitDialog твоего диалога добавь:
m_tabEdit.SubclassDlgItem(IDC_EDIT1, this)
//Вместо IDC_EDIT1 - идентификатор твоего эдита
Тебе нужно субклассить твой эдит таким образом:
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);
//Здесь я не уверен - подправь если что
}
{
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 - идентификатор твоего эдита
Спасибо большое, работает!