Как поймать нажатие кнопки закрытия CTabView?

Я пишу приложение в 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);
}

0

Решение

Это потому, что вы запросили событие OnLButtonDown на карте сообщений, а не событие OnLButtonUp, на которое вы реагируете. Либо измените карту сообщений, либо измените свою функцию.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]