Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват нажатия Enter 
:(
    Опции темы
radow
Дата 6.4.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Всем привет. Есть такая проблемка. На форме есть  ListBox, у него есть оброботчик двойного клика. По нажатию клавиши Enter программа закрываеться а я хочу чтобы вызывалась ф-ция обработчика двойного клика ListBox. 
Код

switch(pMsg->message)//здесь я отлавливаю нажатие enter
    {
    case WM_KEYDOWN:
        if(pMsg->wParam==13)
        {
            NMHDR        *pNmhdr;
            LRESULT        *pResult;
            HWND        *h;
        
            pNmhdr = new NMHDR;
            pResult = new LRESULT;
            pNmhdr->hwndFrom = pListControl.m_hWnd;
            pNmhdr->code = NM_DBLCLK;
            pNmhdr->idFrom = 1000;
            OnNMDblclkListFile(pNmhdr, pResult);//обработчик ListBox
            return true;

Код

void CWorkWithWinrarDlg::OnNMDblclkListFile(NMHDR *pNMHDR, LRESULT *pResult)//обработчик ListBox
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    
    CString            NameFile,
                    MaskOne,
                    MaskTwo,
                    CSRar,
                    CSTmp;
    CFileFind        CurrentFile;
    bool            bWorking;
    int                k,
                    StartPos;
    HWND            *handle;

    handle = new HWND;
    CSRar.Insert(0,_T("rar"));
    NameFile =  pListControl.GetItemText(pNMItemActivate->iItem,0);[size=6]//проблема в том что это поле           //NMItemActivate->iItem  содержит не правельное значение[/size]
    MaskOne = this->RootFolder+NameFile;
    MaskTwo.Insert(0,_T("*"));
    MaskTwo = this->RootFolder+MaskTwo;// для перехода если найденый файл папка
    bWorking = CurrentFile.FindFile(MaskTwo.GetBuffer());
    while(bWorking)
    {
        bWorking = CurrentFile.FindNextFileA();
        if(MaskOne==CurrentFile.GetFilePath())
        {
            if(CurrentFile.IsDirectory())
            {
                MaskOne.Insert(MaskOne.GetLength(), _T("\\"));
                this->RootFolder=MaskOne;
                FillListControl();
                break;
            }
            else
            {
                StartPos = 0;
                CSTmp = MaskOne.Tokenize(_T("."),StartPos);
                CSTmp = MaskOne.Tokenize(_T("."),StartPos);
                if(CSTmp==CSRar)
                {
                    break;
                }
                else
                {
                    ShellExecute(*handle,"open",MaskOne.GetBuffer(),NULL,NULL,SW_SHOW);
                    break;
                }
            }
        }
    }
    CurrentFile.Close();
    *pResult = 0;
}


Может есть какой-то другой способ это реализовать
PM MAIL   Вверх
Earnest
Дата 7.4.2009, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(radow @  6.4.2009,  23:58 Найти цитируемый пост)
void CWorkWithWinrarDlg::OnNMDblclkListFile(NMHDR *pNMHDR, LRESULT *pResult)//обработчик ListBox

Это не обработчик лист-бокс. Лист-бокс не посылает WM_NOTIFY, он посылает WM_COMMAND. Если ты, конечно, не называешь лист-боксом лист вью. Уведомление называется LBN_DBLCLK.



--------------------
...
PM   Вверх
radow
Дата 7.4.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Ты прав это не ListBox а List Control (sorry за ошибку). Что мне делать с эти уведомлением.

Это сообщение отредактировал(а) radow - 7.4.2009, 21:47
PM MAIL   Вверх
Earnest
Дата 8.4.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Первый фрагмент кода - это откуда? Из PretranslateMessage? Ты туда попадаешь?


--------------------
...
PM   Вверх
radow
Дата 8.4.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Да. Первый фрагмент из PretranslateMessage. По события срабатывает это ф-ция OnNMDblclkListFile в нее я и попадаю только нечего непроисходит т.к. pNMItemActivate->iItem содержит неправельое значение.  Может быть я неправельно эту структуру NMHDR        *pNmhdr заполняю.


PM MAIL   Вверх
Earnest
Дата 8.4.2009, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Заполняешь ты, конечно, неправильно. Во-первых - ты выдеяяешь NMHDR, а должно быть NMITEMACTIVATE, или что там в DBCLICK приходит. И с какой радости pNMItemActivate->iItem будет правильно заполнен, если его вообще никто не заполняет? Я уж молчу о том, что вся эта выделенная радость остается висеть до посинения - никто ее не чистит. Глазом моргуть не успеешь, всю память засрешь...
И вообще, не надо вызывать из обработчика клавиши обработчик клика только потому, что сделать нужно тоже самое. Правильно написать отдельную функцию с ясными параметрами (номер итема и что там еще надо), которую и вызывать как из обаботчика клика, так и из PreTranslate, а не мутить с упаковкой никому не нужного NMHDR.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0951 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.