📄 advtabctrl.cpp
字号:
// AdvTabCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "myie.h"
#include "AdvTabCtrl.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAdvTabCtrl
CAdvTabCtrl::CAdvTabCtrl()
{
m_hDragCursor = LoadCursor(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_POINTER_DRAG));
TabCtrlItem.pszText = pszText;
TabCtrlItem.cchTextMax = 255;
}
CAdvTabCtrl::~CAdvTabCtrl()
{
}
BEGIN_MESSAGE_MAP(CAdvTabCtrl, CTabCtrl)
//{{AFX_MSG_MAP(CAdvTabCtrl)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDBLCLK()
ON_WM_MBUTTONDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAdvTabCtrl message handlers
void CAdvTabCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bDragging)
{
int id = GetTabIDFromPoint(point);
if(id<0 || id==m_nDragTabID)
SetCursor(m_hOldCursor);
else
SetCursor(m_hDragCursor);
}
CTabCtrl::OnMouseMove(nFlags, point);
}
void CAdvTabCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
try{
/* if(id == m_id && GetCurSel()!=id)
{
//change select
TCITEM TabCtrlItem;
if(id>=0)
{
TabCtrlItem.mask = TCIF_PARAM;
GetItem(id, &TabCtrlItem);
if(TabCtrlItem.lParam != NULL)
{
BOOL bMax;
CChildFrame * tcf;
tcf = (CChildFrame*)pMainFrame->MDIGetActive(&bMax);
((CChildFrame*)TabCtrlItem.lParam)->m_bSkipSel = TRUE;
((CChildFrame*)TabCtrlItem.lParam)->nCurTabID = id;
if(((CChildFrame*)TabCtrlItem.lParam)->bProtect)
pMainFrame->PostMessage(WM_ACTIVATE_WINDOW, 0, TabCtrlItem.lParam);
else
{
pMainFrame->MDIActivate((CChildFrame*)TabCtrlItem.lParam);
SetCurSel(id);
}
if(tcf!=NULL && bMax)
{
m_bMax = 1;
}
}
}
}
m_id = -1;*/
if(m_bDragging)
{
int id = GetTabIDFromPoint(point);
m_bDragging = FALSE;
if(id>=0 && id!=m_nDragTabID)
{
if(id<m_nDragTabID)
id--;
//insert new tab
TabCtrlItem.mask = TCIF_TEXT|TCIF_PARAM|TCIF_IMAGE|TCIF_STATE;
InsertItem( id+1, &TabCtrlItem );
//delete tab
if(id+1<m_nDragTabID)
m_nDragTabID ++;
DeleteItem(m_nDragTabID);
//select this tab
if(m_nDragTabID<id+1)
id--;
if(m_bSel)
SetCurSel(id+1);
AfxGetMainWnd()->PostMessage(WM_UPDATE_TAB_TIP);
}
}
}catch(...)
{
}
CTabCtrl::OnLButtonUp(nFlags, point);
}
int CAdvTabCtrl::GetTabIDFromPoint(CPoint &point)
{
TCHITTESTINFO info;
info.pt = point;
info.flags = TCHT_NOWHERE;
int id = HitTest(&info);
return id;
}
void CAdvTabCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(pMainFrame->m_nAllowDBC>0)
{
ProcessClick(nFlags, point, 0);
}
CTabCtrl::OnLButtonDblClk(nFlags, point);
}
void CAdvTabCtrl::OnMButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(pMainFrame->m_nAllowMC>0)
{
ProcessClick(nFlags, point, 1);
}
CTabCtrl::OnMButtonDown(nFlags, point);
}
void CAdvTabCtrl::ProcessClick(UINT nFlags, CPoint point, int nClickButton)
{
try{
TCHITTESTINFO hti;
hti.pt = point;
hti.flags = TCHT_ONITEM | TCHT_ONITEMICON | TCHT_ONITEMLABEL ;
int nTabID = HitTest(&hti);
TCITEM TabCtrlItem;
TabCtrlItem.mask = TCIF_PARAM;
GetItem(nTabID, &TabCtrlItem);
if(TabCtrlItem.lParam != NULL)
{
CChildFrame* tcf = ((CChildFrame*)TabCtrlItem.lParam);
if((nClickButton==0 && pMainFrame->m_nAllowDBC==1) || (nClickButton==1 && pMainFrame->m_nAllowMC==1))
{
//2.2 313 post instead send
tcf->PostMessage(WM_CLOSE);
tcf->m_pView->m_bToClose = TRUE;
//tcf->MDIDestroy();
}
else if((nClickButton==0 && pMainFrame->m_nAllowDBC==2) || (nClickButton==1 && pMainFrame->m_nAllowMC==2))
{
//save as
tcf->m_pView->PostMessage(WM_COMMAND, ID_FILE_SAVEAS, 0);
}
else if((nClickButton==0 && pMainFrame->m_nAllowDBC==3) || (nClickButton==1 && pMainFrame->m_nAllowMC==3))
{
//save html
tcf->m_pView->PostMessage(WM_COMMAND, ID_FILE_SAVEHTML, 0);
}
else if((nClickButton==0 && pMainFrame->m_nAllowDBC==4) || (nClickButton==1 && pMainFrame->m_nAllowMC==4))
{
//save html
tcf->m_pView->PostMessage(WM_COMMAND, ID_FILE_AUTOSAVE, 0);
}
}
}catch(...)
{
}
}
void CAdvTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// m_id = GetTabIDFromPoint(point);
if(!m_bDragging && (nFlags & MK_LBUTTON))
{
m_bDragging = TRUE;
m_hOldCursor = GetCursor();
m_nDragTabID = GetTabIDFromPoint(point);
TabCtrlItem.mask = TCIF_PARAM|TCIF_IMAGE|TCIF_TEXT|TCIF_STATE;
GetItem(m_nDragTabID, &TabCtrlItem);
if(GetCurSel() == m_nDragTabID)
m_bSel = TRUE;
else
m_bSel = FALSE;
}
CTabCtrl::OnLButtonDown(nFlags, point);
}
void CAdvTabCtrl::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_bDragging = FALSE;
CTabCtrl::OnRButtonUp(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -