Получение ON_NOTIFY_RANGE для работы с CSliderCtrl

У меня есть массив CSliderCtrl в моей форме окна, от которого мне нужно получать уведомления. Я использую объявление ON_NOTIFY_RANGE для сопоставления обновлений ползунка с соответствующим обработчиком. Моя проблема в том, что единственным событием, которое дает мне уведомление, является событие NM_RELEASEDCAPTURE. Итак, мой код выглядит так:

BEGIN_MESSAGE_MAP(CTheThingDlg, CDialogEx)
   ON_NOTIFY_RANGE(NM_RELEASEDCAPTURE, start_id, end_id, handler)
END_MESSAGE_MAP()

void MyClass::handler(UINT p_id, NMHDR* p_notify_msg_ptr, LRESULT* p_result_ptr)
{
   //Do Stuff
}

Я пытался использовать WM_H/VSCROLL, TB_THUMBTRACK, TB_LINEUP/DOWN и другие события, но ни одно из них не дает мне уведомления, использую ли я мышь или клавиатуру для прокрутки. Это просто горизонтальные полосы прокрутки, созданные с помощью следующего кода:

slider_ctrl.Create(WS_CHILD | WS_VISIBLE | TBS_HORZ | TBS_BOTTOM | TBS_FIXEDLENGTH,
                   CRect(x1, y1, x2, y2),
                   this,
                   id);

Пенни за ваши мысли.

1 ответ

Вам нужно обработать сообщение WM_HSCROLL. TB_THUMBTRACK и другие уведомления TB не являются сообщениями, они передаются обработчику сообщений WM_HSCROLL в параметре nSBCode.

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