OnVScroll: вызывается из CSpinButtonCtrl или вертикальной полосы прокрутки? - PullRequest
1 голос
/ 30 мая 2020

У меня есть производный класс MF C CFormView (CMyFormView), и я должен реализовать свою собственную функцию OnVScroll.

My CMyFormView используется для нескольких ресурсов диалогового окна, в основном для повторной реализации функции OnCtlColor(). Некоторые диалоговые окна содержат элемент управления CSpinButtonCtrl.

Моя проблема:
Когда вызывается функция OnVScroll, я не могу узнать, исходит ли сообщение Windows от CSpinButtonCtrl или с полосы прокрутки.

void CMyFormView :: OnVScroll (UINT nSBCode, UINT nPos, CScrollBar * pScrollBar)
{
// message comes from CSpinButtonCtrl or VscrollBare ?
}  

Я не могу использовать CSpinButtonCtrl ID ( dlgitem ) элементов управления, потому что их очень много.

Вопрос:
Как узнать, исходит ли сообщение от CSpinButtonCtrl или полосы прокрутки?

Сведения о среде:

  • Windows 7
  • Visual Studio 2010
  • MF C

1 Ответ

1 голос
/ 30 мая 2020

Если обработчик OnVScroll вызывается с помощью действий на полосе прокрутки окна (предоставляемой структурой), то параметр pScrollBar будет NULL; если это из элемента управления, то это не будет NULL. Из документации CWnd :

pScrollBar Если сообщение прокрутки пришло из элемента управления с полосой прокрутки, содержит указатель на элемент управления. Если пользователь щелкнул полосу прокрутки окна, этот параметр имеет значение NULL. Указатель может быть временным и не должен сохраняться для дальнейшего использования.

Итак, вы можете просто проверить значение NULL:

void CMyFormView :: OnVScroll (UINT nSBCode, UINT nPos, CScrollBar * pScrollBar)
{
    if (!pScrollBar) {
        // From window's scrollbar...
    }
    else {
        // From a control...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...