我有一个派生的MFC CFormView类(CMyFormView),我必须实现自己的OnVScroll函数。

我的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
  • MFC
  • 最佳答案

    如果OnVScroll处理程序是通过窗口(框架提供的)滚动条中的操作调用的,则pScrollBar参数将为NULL;如果来自控件,则不会是NULL。从CWnd Documentation:



    因此,您只需检查NULL值即可:

    void CMyFormView :: OnVScroll (UINT nSBCode, UINT nPos, CScrollBar * pScrollBar)
    {
        if (!pScrollBar) {
            // From window's scrollbar...
        }
        else {
            // From a control...
        }
    }
    

    10-01 12:01