CStatic subclassed Control не получает входные сообщения

Я использую приложение, основанное на диалоге MFC, и имею подкласс CStatic контроль. Я хотел бы получать WM_MOUSEWHEEL и другие сообщения в моем подклассе управления, но так или иначе эти сообщения никогда не приходят.

Вот как выглядит мой диалог:

введите описание изображения здесь

Я делаю только несколько очень простых рисунков и хочу прокрутить мой список вверх и вниз.

Я уже сделал:

  • Измените порядок табуляции, чтобы в первую очередь сосредоточиться на подклассе CStatic.
  • Перезаписал OnNcHitTest, чтобы постоянно фокусироваться на подклассе CStatic
  • Добавлена ​​полоса прокрутки в сторону
  • Написал обработчик сообщений для WM_MOUSEWHEEL, WM_LBUTTONDOWN, WM_KEYDOWN и WM_VSCROLL
  • Пробовал ловить сообщения в PreTranslateMessage

К сожалению, ничего не вызывается, когда я прокручиваю в диалоге / нажимаю клавишу или щелкаю мышью. Сообщения просто не приходят.

Вот мой обработчик Mousewheel, например:

class CFolderView : public CStatic
{
   ...
   afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
   DECLARE_MESSAGE_MAP()
   ...
}

BEGIN_MESSAGE_MAP(CFolderView, CStatic)
    ON_WM_MOUSEWHEEL()
    ON_WM_KEYDOWN()
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

BOOL CFolderView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
    MessageBox("Mouse Wheel moved!", "Debug", MB_OK);

    return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}

Я не понимаю, почему входные сообщения не отправляются моему подклассу управления. Есть ли какой-то переключатель, который разрешает ввод для подкласса управления?

1 ответ

Решение

Вы не можете справиться WM_MOUSEWHEEL в CStatic потому что он не может сфокусироваться на дизайне.

Из MSDN:

Сообщение WM_MOUSEWHEEL отправляется в окно фокуса при вращении колесика мыши

Глядя на ваш скриншот, я бы предложил разделить на подклассы CListBox вместо.

Другие вопросы по тегам