如何抓住CTabView关闭按钮按下

How to catch CTabView close button pressed?

本文关键字:关闭按钮 CTabView 何抓住      更新时间:2023-10-16

我正在用 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);
}

这是因为您在消息映射中请求了 OnLButtonDown 事件,而不是您正在响应的 OnLButtonUp 事件。更改消息映射或更改函数。