0

タブ付きの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);
}
4

1 に答える 1

0

これは、応答している OnLButtonUp イベントではなく、メッセージ マップで OnLButtonDown イベントを要求したためです。メッセージ マップを変更するか、関数を変更してください。

于 2012-10-10T13:37:51.760 に答える