Я создаю класс, который наследуется от CScrollBar в диалоговом приложении MFC. В классе диалога (MyScrollbarDlg) я устанавливаю сообщение ON_WM_VSCROLL и объявляю метод OnVSCroll в файле заголовка. Я также реализую метод OnVScroll () в соответствующем файле .cpp. Но, к моему удивлению, когда я нажимаю стрелку в нижней части полосы прокрутки, она работает только в первый раз.
Я хочу отладить свой код, поэтому я установил точку останова в методе OnVScroll. Затем произошла странная вещь. Точка останова была достигнута только при первом нажатии. Когда я продолжу, полоса прокрутки исчезла из диалога! Я понятия не имею, как это могло произойти. Может ли кто-нибудь помочь мне исправить эту досадную ошибку? Большое спасибо!
Я установил диапазон прокрутки, как показано ниже:
SCROLLINFO scrllInfo;
m_scrollbar.GetScrollInfo(&scrllInfo, SIF_ALL);
scrllInfo.nMax = 15;
scrllInfo.nMin = 0;
scrllInfo.nPage = 0;
scrllInfo.nPos = 0;
m_scrollbar.SetScrollInfo(&scrllInfo, TRUE);
Кстати, я не использую встроенную полосу прокрутки диалогового окна, а элемент управления полосой прокрутки, который устанавливается в качестве члена диалогового окна.
Я провел некоторый эксперимент и обнаружил, что упомянутая проблема возникла только тогда, когда я щелкнул стрелку в нижней части элемента управления полосы прокрутки. Это хорошо работает, когда я нажимаю другую стрелку или перетаскиваю поле прокрутки. Есть ли что-то другое при нажатии на нижнюю стрелку полосы прокрутки, о которой я не знаю?
Я выяснил, что когда сообщение прокрутки НЕ THUMBPOSITION или THUMBTRACK, параметр nPos
метода OnVScroll()
не используется. Поэтому я изменил свой код так:
int currPos = m_scrollbar.GetScrollPos(); m_scrollbar.SetScrollPos(currPos + 1, TRUE);
На этот раз все работает нормально, но если установить точку останова, полоса прокрутки снова исчезнет. Ты знаешь почему?