У меня следующий класс объявлен как в .hpp
:
class AFX_EXT_CLASS MyClass: public CDialog
{
....
};
Я добавил обработчик сообщений прокрутки в определении класса:
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
Я добавил запись карты для обработчика сообщений в исходном файле .cpp
:
BEGIN_MESSAGE_MAP (MyClass, CDialog)
//{{AFX_MSG_MAP(MyClass)
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Я реализовал обработчик сообщений OnVScroll
в исходном файле:
void MyClass::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int vscroll_inc;
switch (nSBCode)
{
...
}
}
Я установил SetScrollRange
и SetScrollPos
, и я вижу полосу прокрутки в меню. Однако, OnVScroll
никогда не вызывается. Я могу перетащить свиток, сколько захочу, но он просто возвращается в положение 0
после отпускания мыши.
У меня есть другой класс, объявленный как class YourClass: public CDialog { ... };
, и с использованием того же кода прокрутка работает нормально, и вызывается OnVScroll
.
Есть какие-нибудь подсказки относительно того, какие дополнительные шаги мне нужно сделать в MyClass
, чтобы заставить работать прокрутку?
После отладки удаление ON_WM_VSCROLL()
из карты сообщений в YourClass
ведет себя так же, как MyClass
, то есть полоса прокрутки есть, но OnVScroll
не запускается, поэтому я подозреваю, что она как-то связана с карта сообщений.
Или, может быть, это связано с AFX_EXT_CLASS
? .. Я не уверен. Может ли кто-нибудь указать мне правильное направление?