Здравствуйте, Bug_z, Вы писали:
skip
B_>Вообще то мне надо чтобы при нажатии Enter на выбраном пункте выполнялось определенное действие — если поставить обработчик на любую клавишу, то оно выполняется но когда ставишь на Enter то ничего не происходит!
void CMyTreeCtrl::OnReturn()
{
HTREEITEM hItem = GetSelectedItem();
if (hItem)
{
// здесь делаешь то, что тебе надо
}
}
Использую обькт CTreeCtrl и хочу чтобы выборможно было делать с помощью Enter.
Но когда ставлю обработчик на одно из событий Enter игнорируется ..... причем другие клавиши нормально обрабатываются.
В чем может быть проблема ?
Здравствуйте, 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);
}
Здравствуйте, Андрей, Вы писали:
А>Здравствуйте, 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 то ничего не происходит!
Здравствуйте, 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).