Получение 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.