Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: не могу отловить нажатие ENTER на List Control  (Прочитано 5972 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
maximsoft
Новенький

ua
Offline Offline

« : 02-05-2009 12:35 » new

В общем - простой файловый менеджер на основе диалогового окна
В нем есть List Control, в котором соответственно уже загружен список каталогов/файлов.
обработчик по DBLклику мыши получился(чтобы входить в папки или запускать файлы), а вот по ENTER - проблема диалог закрывается.
Переопределил OnOK, ENTER вообще до обработчика не доходит

обработчик:
Код:

void CFManagerDlg::OnKeydownListLeft(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;

switch (pLVKeyDow->wVKey)
{
case VK_RETURN: OnDblclkListLeft(pNMHDR, pResult); break;  \\здесь посылаю на DBLклик (может я гоню))
case VK_F8:
case VK_DELETE: OnButtonDel(); break;
case VK_F5: OnButtonCopy(); break;
case VK_F6: OnButtonMove(); break;
case VK_F7: OnButtonCreate(); break;
}
*pResult = 0;
}


что делать? может кто-то альтернативу посоветует... спасибо..
Записан
maximsoft
Новенький

ua
Offline Offline

« Ответ #1 : 02-05-2009 22:01 » 

Тему можно закрывать

все благополучно разрешил таким образом:

Код:

void CFManagerDlg::OnOK()
{
POSITION Pos;
int item = 0;
CString NameSelItem, AttrSelItem;

if (Panel == LEFT)
{
Pos = m_listleft.GetFirstSelectedItemPosition();
item = m_listleft.GetNextSelectedItem(Pos);
NameSelItem = m_listleft.GetItemText(item, 0);
AttrSelItem = m_listleft.GetItemText(item, 1);
}
else
{
Pos = m_listright.GetFirstSelectedItemPosition();
item = m_listright.GetNextSelectedItem(Pos);
NameSelItem = m_listright.GetItemText(item, 0);
AttrSelItem = m_listright.GetItemText(item, 1);
}

OpenFunction(NameSelItem, AttrSelItem); //а в ней уже обрабатываю
}

сам вопросы задаю - сам на их и отвечаю... Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 03-05-2009 05:50 » 

maximsoft, ну это же здорово, что сам разобрался Ага

щас выходные, поэтому народ в ауте (ну, за других не скажу точно, лично я - да ))) )

1) можно произвести от лист бокс дитё и поймать там сообщение WM_KEYDOWN с параметром VK_RETURN (или WM_KEYUP с параметром VK_RETURN , а WM_KEYDOWN - развернуть, чтобы диалдог не закрылся)

2)через OnOk можно поступить так:
Код:
void CFManagerDlg::OnOK() 
{
if(::GetDlgItem(m_hWnd,IDC_LIST1) == ::GetFocus())
{
//свои действия
}
else
{
CDialog::OnOK();
}
}

Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines