如何抓住CTabView关闭按钮?

时间:2012-10-10 13:28:16

标签: c++ mfc tabview

我正在使用标签在MFC中编写应用程序。我正用自己的课程延长CTabView课程。

我想在关闭活动标签时捕捉事件,并实际将其从TabView中删除。

这里永远不会处理消息WM_LBUTTONUP - 在任何一个孩子班级都没有处理 - 我做错了什么?

当我关闭活动标签时,我可以在哪里捕捉事件?

IMPLEMENT_DYNCREATE(CBottomTabView, CTabView)

BEGIN_MESSAGE_MAP(CBottomTabView, CTabView)
    ON_WM_CREATE()
    ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

CBottomTabView::CBottomTabView()
{
}

CBottomTabView::~CBottomTabView()
{
}


BOOL CBottomTabView::PreCreateWindow(CREATESTRUCT& cs) 
{
    if (!CTabView::PreCreateWindow(cs))
        return FALSE;

    cs.dwExStyle |= WS_EX_CLIENTEDGE;
    cs.style &= ~WS_BORDER;
    cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 
        ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL);

    return TRUE;
}

int CBottomTabView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CTabView::OnCreate(lpCreateStruct) == -1)
        return -1;

    GetTabControl().SetLocation(CMFCBaseTabCtrl::LOCATION_BOTTOM);
    GetTabControl().ModifyTabStyle(CMFCTabCtrl::STYLE_3D_ONENOTE);
    GetTabControl().EnableTabDocumentsMenu(TRUE);
    GetTabControl().EnableActiveTabCloseButton(TRUE);
    GetTabControl().EnableTabSwap(TRUE);

    AddView(RUNTIME_CLASS(CLogView),_T("Log"));
    AddView(RUNTIME_CLASS(CLogView),_T("Log2"));
    AddView(RUNTIME_CLASS(CLogView),_T("Log3"));
    return 0;
}

// This method is never handled!!!
void CBottomTabView::OnLButtonUp(UINT nFlags, CPoint point)
{

    int nTab = GetTabControl().GetTabFromPoint(point);
    GetTabControl().SetActiveTab(nTab);
    if (GetTabControl().IsTabCloseButtonPressed())
    {
        RemoveView(nTab);
    }
    else
    {
        CTabView::OnLButtonUp(nFlags, point);
    }

}

// This metod is handled only when changing the tab
void CBottomTabView::OnActivateView(CView* view)
{
    CTabView::OnActivateView(view);
}

1 个答案:

答案 0 :(得分:0)

这是因为你在消息映射中要求OnLButtonDown事件,而不是你正在做出反应的OnLButtonUp事件。更改消息映射或更改功能。