对CWnd :: OnLButtonDown()和CTreeCtrl :: OnLButtonDown()感到困惑

时间:2009-12-15 12:21:59

标签: c++ mfc

MFC图书馆参考
CWnd :: OnLButtonDown

void CMyCla::OnLButtonDown(UINT nFlags, CPoint point)
{
    CWnd::OnLButtonDown(nFlags, point);
}


void CMyTreeCla::OnLButtonDown(UINT nFlags, CPoint point)
{
    CTreeCtrl::OnLButtonDown(nFlags, point);
}

我知道遗产。

class CTreeCtrl : public CWnd
{
......
}

当我想调用OnLButtonDown()时,是否有明确的规则要遵循?

谢谢。

3 个答案:

答案 0 :(得分:1)

如果您希望首先调用父类实现,那么您调用父类的OnLButtonDown()然后添加您的实现。

答案 1 :(得分:1)

认为这就是你想要的。

在类标题中,您需要声明消息映射,并编写函数头。

Class myCWnd : public CWnd
{
    DECLARE_MESSAGE_MAP() //note, no semi colon

    afx_msg void OnLButtonDown( UINT nFlags, CPoint pt );
};

在cpp文件中:

BEGIN_MESSAGE_MAP(myCWnd, CWnd)
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

void myCWnd::OnLButtonDown( UINT nFlags, CPoint pt )
{
    //do what you want here

    CWnd::OnLButtonDown(nFlags, pt); //call base class method
}

答案 2 :(得分:1)

通常,您在实现中执行要对事件执行的操作,然后调用父类的实现。 This codeguru post在本教程的第2步中展示了一个很好的示例。但这取决于你想要对OnLButtonDown事件做些什么,所以在你的情况下它可能是另一种方式。

我假设你的例子中的继承如下:

class CMyCla : public CWnd
{
}

class CMyTreeCla : public CTreeCtrl
{
......
}

事实上,正如您所做的那样,您可以在OnLButtonDown中执行操作,然后调用父实现:

void CMyCla::OnLButtonDown(UINT nFlags, CPoint point)
{
    // Your stuff here
    // blah
    // end your stuff
    CWnd::OnLButtonDown(nFlags, point);
}


void CMyTreeCla::OnLButtonDown(UINT nFlags, CPoint point)
{
    // Your stuff here
    // blah
    // end your stuff
    CTreeCtrl::OnLButtonDown(nFlags, point);
}