void CClosableTabCtrl::OnContextMenu(CWnd* /*pWnd*/, CPoint point) { if (m_bCloseable) { if (point.x == -1 || point.y == -1) { if (!SetDefaultContextMenuPos()) return; point = m_ptCtxMenu; ClientToScreen(&point); } else { m_ptCtxMenu = point; ScreenToClient(&m_ptCtxMenu); } int iTab = GetTabUnderPoint(m_ptCtxMenu); if (iTab != -1) { if (GetParent()->SendMessage(UM_QUERYTAB, (WPARAM)iTab) == 0) { CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING, MP_REMOVE, GetResString(IDS_FD_CLOSE)); menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); } } } }
void CClosableTabCtrl::OnLButtonUp(UINT nFlags, CPoint point) { if (m_bCloseable) { int iTab = GetTabUnderPoint(point); if (iTab != -1) { CRect rcItem; GetItemRect(iTab, rcItem); rcItem.InflateRect(2, 2); // get the real tab item rect bool bVistaThemeActive = theApp.IsVistaThemeActive(); CRect rcCloseButton; GetCloseButtonRect(iTab, rcItem, rcCloseButton, iTab == GetCurSel(), bVistaThemeActive); // The visible part of our close icon is one pixel less on each side if (!bVistaThemeActive) { rcCloseButton.top += 1; rcCloseButton.left += 1; rcCloseButton.right -= 1; rcCloseButton.bottom -= 1; } if (rcCloseButton.PtInRect(point)) { GetParent()->SendMessage(UM_CLOSETAB, (WPARAM)iTab); return; } } } CTabCtrl::OnLButtonUp(nFlags, point); }
void CClosableTabCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) { int iTab = GetTabUnderPoint(point); if (iTab != -1) { GetParent()->SendMessage(UM_DBLCLICKTAB, (WPARAM)iTab); return; } CTabCtrl::OnLButtonDblClk(nFlags, point); }
void CClosableTabCtrl::OnMButtonUp(UINT nFlags, CPoint point) { if (m_bCloseable) { int iTab = GetTabUnderPoint(point); if (iTab != -1) { GetParent()->SendMessage(UM_CLOSETAB, (WPARAM)iTab); return; } } CTabCtrl::OnMButtonUp(nFlags, point); }
BOOL CClosableTabCtrl::OnCommand(WPARAM wParam, LPARAM lParam) { if (wParam == MP_REMOVE) { if (m_ptCtxMenu.x != -1 && m_ptCtxMenu.y != -1) { int iTab = GetTabUnderPoint(m_ptCtxMenu); if (iTab != -1) { GetParent()->SendMessage(UM_CLOSETAB, (WPARAM)iTab); return TRUE; } } } return CTabCtrl::OnCommand(wParam, lParam); }
void CClosableTabCtrl::OnLButtonUp(UINT nFlags, CPoint point) { if (m_bCloseable) { int iTab = GetTabUnderPoint(point); if (iTab != -1) { CRect rcItem; GetItemRect(iTab, rcItem); CRect rcCloseButton; GetCloseButtonRect(rcItem, rcCloseButton); rcCloseButton.top -= 2; rcCloseButton.left -= 4; rcCloseButton.right += 2; rcCloseButton.bottom += 4; if (rcCloseButton.PtInRect(point)) { GetParent()->SendMessage(UM_CLOSETAB, (WPARAM)iTab); return; } } } CTabCtrl::OnLButtonUp(nFlags, point); }
int CClosableTabCtrl::GetTabUnderContextMenu() const { if (m_ptCtxMenu.x == -1 || m_ptCtxMenu.y == -1) return -1; return GetTabUnderPoint(m_ptCtxMenu); }