OnVScroll () не запускается в диалоговом меню? - PullRequest
0 голосов
/ 01 мая 2019

У меня следующий класс объявлен как в .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? .. Я не уверен. Может ли кто-нибудь указать мне правильное направление?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...