Маршрутизация сообщения
От: Roman.Egorishev  
Дата: 22.08.05 15:17
Оценка:
Добрый день.

Столкнулся вот с такой проблемой : повесил хук на события мыши, все получилось, сообщения получал, но появился побочный эффект — при выделении элементов CListrCtrl происходит зависание.

Подскажите где проблему искать?

Заранее благодарен.
Re: Маршрутизация сообщения
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.08.05 15:29
Оценка:
Здравствуйте, Roman.Egorishev, Вы писали:

RE>Добрый день.


RE>Столкнулся вот с такой проблемой : повесил хук на события мыши, все получилось, сообщения получал, но появился побочный эффект — при выделении элементов CListrCtrl происходит зависание.


RE>Подскажите где проблему искать?


В коде, вестимо. Может, сами себя (вместо базы) вызываете?
HgLab: Mercurial Server and Repository Management for Windows
Re[2]: Маршрутизация сообщения
От: Roman.Egorishev  
Дата: 23.08.05 08:00
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Здравствуйте, Roman.Egorishev, Вы писали:


RE>>Добрый день.


RE>>Столкнулся вот с такой проблемой : повесил хук на события мыши, все получилось, сообщения получал, но появился побочный эффект — при выделении элементов CListrCtrl происходит зависание.


RE>>Подскажите где проблему искать?


Н>В коде, вестимо. Может, сами себя (вместо базы) вызываете?


Непонятный факт, что при смене фокуса — зависание пропадает.
Т.е.
1) Счелкаю на айтеме лист-контрола
2) Все замирает
3) Делаю другое окно активным
4) Происходит выделение
5) И т.д.
Re[3]: Маршрутизация сообщения
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 23.08.05 15:07
Оценка:
Здравствуйте, Roman.Egorishev, Вы писали:

RE>Непонятный факт, что при смене фокуса — зависание пропадает.


Давайте код тады.
HgLab: Mercurial Server and Repository Management for Windows
Re[4]: Маршрутизация сообщения
От: Roman.Egorishev  
Дата: 23.08.05 15:21
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Здравствуйте, Roman.Egorishev, Вы писали:


RE>>Непонятный факт, что при смене фокуса — зависание пропадает.


Н>Давайте код тады.


Краткий экскурс в историю.
Вообще задача стояла в отображении подсказок в немодальном диалоге, рождающимся с dll. Приложение представляет собой Add-in для Microsoft Office. Появлялась немодальная панель, на которой несколько закладок с диалогами. вот и нужно было отображать подсказки для компонент на этих дилогах. Сегодня ушел от хуков через перенаправление сообщений в CToolTipCtrl из WindowsProc.

Но хотелось бы понять, что было не так в моем хуке.

Итак, код для обработки мышиных сообщений представлял собой такое:


// Hook procedure for WH_GETMESSAGE hook type.
LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    // Switch the module state for the correct handle to be used.
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

    // If this is a keystrokes message, translate it in controls'
    // PreTranslateMessage().
    LPMSG lpMsg = (LPMSG) lParam;
    if( (nCode >= 0) &&
        PM_REMOVE == wParam &&
        (lpMsg->message >= WM_MOUSEFIRST && lpMsg->message <= WM_MOUSELAST) &&
        AfxGetApp()->PreTranslateMessage((LPMSG)lParam) )
        {
        // The value returned from this hookproc is ignored, and it cannot
        // be used to tell Windows the message has been handled. To avoid
        // further processing, convert the message to WM_NULL before
        // returning.
        lpMsg->message = WM_NULL;
        lpMsg->lParam = 0L;
        lpMsg->wParam = 0;
        }



    // Passes the hook information to the next hook procedure in
    // the current hook chain.
    return ::CallNextHookEx(hHook, nCode, wParam, lParam);
}

BOOL CDlgDataSources::OnInitDialog()
{
    CDialog::OnInitDialog();
    
    // Install the WH_GETMESSAGE hook function.
      hHook = ::SetWindowsHookEx(
         WH_GETMESSAGE,
         GetMessageProc,
         AfxGetInstanceHandle(),
         GetCurrentThreadId());
      ASSERT (hHook);

      return TRUE;
}

BOOL CDlgDataSources::PreTranslateMessage(MSG* pMsg)
{
    m_ToolTip->RelayEvent( pMsg );

    return CDialog::PreTranslateMessage(pMsg);
}


При сужении диапазона сообщений до WM_MOUSEMOVE — зависание при нажатии на item'е CListCtrl'а прпало, но соотв пропали и остальные возможности — drag-and-drop и т.д.

Особый интерес для меня представляю выделенные строки кода, возможно изначально в них проблема...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.