⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 advtabctrl.cpp

📁 myie的源代码
💻 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 + -