Re[3]: CTreeCtrl and TVN_KEYDOWN or TVN_RETURN
От: Андрей Россия  
Дата: 18.09.03 09:50
Оценка: 2 (1)
Здравствуйте, Bug_z, Вы писали:

skip

B_>Вообще то мне надо чтобы при нажатии Enter на выбраном пункте выполнялось определенное действие — если поставить обработчик на любую клавишу, то оно выполняется но когда ставишь на Enter то ничего не происходит!


void CMyTreeCtrl::OnReturn()
{
  HTREEITEM hItem = GetSelectedItem();
  if (hItem)
  {
    // здесь делаешь то, что тебе надо
  }
}
CTreeCtrl and TVN_KEYDOWN or TVN_RETURN
От: Bug_z Австрия  
Дата: 18.09.03 09:17
Оценка:
Использую обькт CTreeCtrl и хочу чтобы выборможно было делать с помощью Enter.
Но когда ставлю обработчик на одно из событий Enter игнорируется ..... причем другие клавиши нормально обрабатываются.
В чем может быть проблема ?
Re: CTreeCtrl and TVN_KEYDOWN or TVN_RETURN
От: Андрей Россия  
Дата: 18.09.03 09:31
Оценка:
Здравствуйте, Bug_z, Вы писали:

skip

Насколько я помню, это бага TreeCtrl. Хотя могу и ошибаться, я лечил так:

BOOL CMyTreeCtrl::PreTranslateMessage(MSG* pMsg)
{
  if (pMsg->message == WM_KEYDOWN)
  {
    if (pMsg->wParam == VK_RETURN)
    {
      OnReturn();
      return TRUE;
    }
    else if (pMsg->wParam == VK_ESCAPE)
    {
      OnCancel();
      return TRUE;
    }
  }

  return CTree::PreTranslateMessage(pMsg);
}
Re[2]: CTreeCtrl and TVN_KEYDOWN or TVN_RETURN
От: Bug_z Австрия  
Дата: 18.09.03 09:46
Оценка:
Здравствуйте, Андрей, Вы писали:

А>Здравствуйте, Bug_z, Вы писали:


А>skip


А>Насколько я помню, это бага TreeCtrl. Хотя могу и ошибаться, я лечил так:


А>
А>BOOL CMyTreeCtrl::PreTranslateMessage(MSG* pMsg)
А>{
А>  if (pMsg->message == WM_KEYDOWN)
А>  {
А>    if (pMsg->wParam == VK_RETURN)
А>    {
А>      OnReturn();
А>      return TRUE;
А>    }
А>    else if (pMsg->wParam == VK_ESCAPE)
А>    {
А>      OnCancel();
А>      return TRUE;
А>    }
А>  }

А>  return CTree::PreTranslateMessage(pMsg);
А>}
А>


Вообще то мне надо чтобы при нажатии Enter на выбраном пункте выполнялось определенное действие — если поставить обработчик на любую клавишу, то оно выполняется но когда ставишь на Enter то ничего не происходит!
Re: CTreeCtrl and TVN_KEYDOWN or TVN_RETURN
От: Sergio Damned Россия  
Дата: 18.09.03 14:42
Оценка:
Здравствуйте, Bug_z, Вы писали:

B_>Использую обькт CTreeCtrl и хочу чтобы выборможно было делать с помощью Enter.

B_>Но когда ставлю обработчик на одно из событий Enter игнорируется ..... причем другие клавиши нормально обрабатываются.
B_>В чем может быть проблема ?
Насколько я понимаю, ваш Enter уходит к кнопке по умолчанию (если таковая в диалоге есть, пусть даже у
нее стиль "невидимая").
Я делал так: ставил какую-нибудь кнопку, делал ее по умолчанию (Dafault Button), у этой кнопки создавал
событие нажатия, там анализировал активный элемент.
void CE_rDlg::OnEnter() // событие нажатия моей кнопки по умолчанию

        if(GetFocus() == GetDlgItem(IDC_ALIKE)){ // если 'Enter' нажали в элементе IDC_ALIKE
        OnDblclkAlike();
        return;
    }

Ну и так далее по всем элементам, где допускается нажатие Enter.
Прим. OnDblclkAlike() — функция-обработчик двойного клика в моем списке (у вас это может быть CTreeCtrl).
Re: CTreeCtrl and TVN_KEYDOWN or TVN_RETURN
От: Brick_1 Украина  
Дата: 18.09.03 14:47
Оценка:
Здравствуйте, Bug_z, Вы писали:

B_>Использую обькт CTreeCtrl и хочу чтобы выборможно было делать с помощью Enter.

B_>Но когда ставлю обработчик на одно из событий Enter игнорируется ..... причем другие клавиши нормально обрабатываются.
B_>В чем может быть проблема ?

Я делал через таблицу акселераторов в ресурсах. Команду включил в обработчик и все.
С уважением.
Re[2]: CTreeCtrl and TVN_KEYDOWN or TVN_RETURN
От: VAFEL  
Дата: 22.09.03 12:51
Оценка:
Привет!

B_>Я делал через таблицу акселераторов в ресурсах. Команду включил в обработчик и все.

B_>С уважением.

А ты не подскажешь, как ты это делал?

Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.