亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xtabctrl.cpp

?? windows ce開發技巧與實例光盤代碼
?? CPP
字號:
// XTabCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "tabctrl.h"
#include "XTabCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CXTabCtrl

CXTabCtrl::CXTabCtrl()
{
	m_iSelectedTab = 0;
	m_ptTabs.x = 4;
	m_ptTabs.y = 28;

	m_crSelected = 0;
	m_crDisabled = 0;
	m_crNormal = 0;
	m_crMouseOver = 0;

	m_bColorSelected  = false;
	m_bColorDisabled  = false;
	m_bColorNormal    = false;
	m_bColorMouseOver = false;


	m_iIndexMouseOver = -1;

	m_bMouseOver = false;
}

CXTabCtrl::~CXTabCtrl()
{
	m_arrayStatusTab.RemoveAll();
}


BEGIN_MESSAGE_MAP(CXTabCtrl, CTabCtrl)
	//{{AFX_MSG_MAP(CXTabCtrl)
	ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelchange)
	ON_NOTIFY_REFLECT(TCN_SELCHANGING, OnSelchanging)
	ON_WM_MOUSEMOVE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXTabCtrl message handlers

void CXTabCtrl::SetTopLeftCorner(CPoint pt)
{
	m_ptTabs.x = pt.x;
	m_ptTabs.y = pt.y;
}

void CXTabCtrl::SetMouseOverColor(COLORREF cr) 
{
	m_bColorMouseOver = true;
	m_crMouseOver = cr;
}


void CXTabCtrl::SetDisabledColor(COLORREF cr) 
{
	m_bColorDisabled = true;
	m_crDisabled = cr;
}

void CXTabCtrl::SetSelectedColor(COLORREF cr)
{
	m_bColorSelected = true;
	m_crSelected = cr;
}


void CXTabCtrl::SetNormalColor(COLORREF cr)
{
	m_bColorNormal = true;
	m_crNormal = cr;
}



void CXTabCtrl::AddTab(CWnd* pWnd, LPTSTR lpszCaption, int iImage)
{
	ASSERT_VALID(pWnd);

	TCITEM item;
	item.mask = TCIF_TEXT|TCIF_PARAM|TCIF_IMAGE;
	item.lParam = (LPARAM) pWnd;
	item.pszText = lpszCaption;
	item.iImage = iImage;

	int iIndex = m_arrayStatusTab.GetSize();
	InsertItem(iIndex, &item);

	pWnd->SetWindowPos(NULL, m_ptTabs.x, m_ptTabs.y , 0, 0,
						SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOZORDER);
	
	pWnd->ShowWindow(iIndex ? SW_HIDE : SW_SHOW);

	//** the initial status is enabled
	m_arrayStatusTab.Add(TRUE); 

}

void CXTabCtrl::EnableTab(int iIndex, BOOL bEnable)
{
	ASSERT(iIndex < m_arrayStatusTab.GetSize());

	//** if it should change the status ----
	if (m_arrayStatusTab[iIndex] != bEnable)
	{
		m_arrayStatusTab[iIndex] = bEnable;

		//** redraw the item -------
		CRect rect;

		GetItemRect(iIndex, &rect);
		InvalidateRect(rect);
	}
}

void CXTabCtrl::DeleteAllTabs()
{
	m_arrayStatusTab.RemoveAll();
	
	DeleteAllItems();

}

void CXTabCtrl::DeleteTab(int iIndex)
{
	ASSERT(iIndex < m_arrayStatusTab.GetSize());

	m_arrayStatusTab.RemoveAt(iIndex);

	DeleteItem(iIndex);

}


BOOL CXTabCtrl::IsTabEnabled(int iIndex)
{
	ASSERT(iIndex < m_arrayStatusTab.GetSize());
	
	return m_arrayStatusTab[iIndex];
}


BOOL CXTabCtrl::SelectTab(int iIndex)
{
	ASSERT(iIndex < m_arrayStatusTab.GetSize());

	if (GetCurSel() == iIndex)
		return TRUE;

	//** check if the tab is enabled --------
	if (m_arrayStatusTab[iIndex])
	{
		TCITEM item;
		CWnd* pWnd;
		item.mask = TCIF_PARAM;

		GetItem(GetCurSel(), &item);
		pWnd = reinterpret_cast<CWnd*> (item.lParam);
		ASSERT_VALID(pWnd);
		pWnd->ShowWindow(SW_HIDE);

		SetCurSel(iIndex);
		GetItem(iIndex, &item);
		pWnd = reinterpret_cast<CWnd*> (item.lParam);
		ASSERT_VALID(pWnd);
		pWnd->ShowWindow(SW_SHOW);

		return TRUE;
	}

	return FALSE;
}

void CXTabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int iNewTab = GetCurSel();

	if (!IsTabEnabled(iNewTab))
	{
		SetCurSel(m_iSelectedTab);
	}
	else
	{
		TCITEM item;
		CWnd* pWnd;

		item.mask = TCIF_PARAM;
		
		//** hide the current tab ---------
		GetItem(m_iSelectedTab, &item);
		pWnd = reinterpret_cast<CWnd*> (item.lParam);
		ASSERT_VALID(pWnd);
		pWnd->ShowWindow(SW_HIDE);

		//** show the selected tab --------
		GetItem(iNewTab, &item);
		pWnd = reinterpret_cast<CWnd*> (item.lParam);
		ASSERT_VALID(pWnd);
		pWnd->ShowWindow(SW_SHOW);

	}

	*pResult = 0;
}

void CXTabCtrl::OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	m_iSelectedTab = GetCurSel();

	*pResult = 0;
}



void CXTabCtrl::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	CTabCtrl::PreSubclassWindow();
	ModifyStyle(0, TCS_OWNERDRAWFIXED);
}


void CXTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{	
	CRect rect = lpDrawItemStruct->rcItem;
	rect.top += ::GetSystemMetrics(SM_CYEDGE);

	int nTabIndex = lpDrawItemStruct->itemID;
	
	if (nTabIndex < 0) return;

	BOOL bSelected = (nTabIndex == GetCurSel());

	COLORREF crSelected = m_bColorSelected ? m_crSelected : GetSysColor(COLOR_BTNTEXT);
	COLORREF crNormal  = m_bColorNormal   ? m_crNormal   : GetSysColor(COLOR_BTNTEXT);
	COLORREF crDisabled = m_bColorDisabled ? m_crDisabled : GetSysColor(COLOR_GRAYTEXT);


	wchar_t label[64];
	TC_ITEM item;
	item.mask = TCIF_TEXT|TCIF_IMAGE;
	item.pszText = label;     
	item.cchTextMax = 63;    	
	if (!GetItem(nTabIndex, &item))
		return;

	CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
	if (!pDC)
		return;

	int nSavedDC = pDC->SaveDC();

	CRect rectItem;
	POINT pt;

	GetItemRect(nTabIndex, &rectItem);
	GetCursorPos(&pt);
	ScreenToClient(&pt);

	if (rectItem.PtInRect(pt))
		m_iIndexMouseOver = nTabIndex;



	pDC->SetBkMode(TRANSPARENT);
	pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE));

	//**  Draw the image
	CImageList* pImageList = GetImageList();
	if (pImageList && item.iImage >= 0) 
	{

		rect.left += pDC->GetTextExtent(_T(" ")).cx;

		IMAGEINFO info;
		pImageList->GetImageInfo(item.iImage, &info);
		CRect ImageRect(info.rcImage);
		int nYpos = rect.top;

		pImageList->Draw(pDC, item.iImage, CPoint(rect.left, nYpos), ILD_TRANSPARENT);
		rect.left += ImageRect.Width();
	}

	if (!IsTabEnabled(nTabIndex))
	{
		pDC->SetTextColor(crDisabled);
		rect.top -= ::GetSystemMetrics(SM_CYEDGE);
		pDC->DrawText(label, rect, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
	}
	else
	{
		//** selected item -----
		if (bSelected)
			pDC->SetTextColor(crSelected);
		else //** other item ---
		{
			if (m_bColorMouseOver && nTabIndex == m_iIndexMouseOver) 
			{
				pDC->SetTextColor(m_crMouseOver);	
			}
			else
			{
				pDC->SetTextColor(crNormal);
			}
		}

		rect.top -= ::GetSystemMetrics(SM_CYEDGE);
		pDC->DrawText(label, rect, DT_SINGLELINE|DT_VCENTER|DT_CENTER);

	}

	pDC->RestoreDC(nSavedDC);
}

void CXTabCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	//** if we should change the color of the tab ctrl ---
	if (m_bColorMouseOver)
	{
		SetTimer(1,10,NULL);

		if (m_iIndexMouseOver != -1)
		{
			CRect rectItem;
			GetItemRect(m_iIndexMouseOver, rectItem);
			if (!rectItem.PtInRect(point))
			{
				CRect rectOldItem;
				GetItemRect(m_iIndexMouseOver, rectOldItem);
				m_iIndexMouseOver = -1;
				InvalidateRect(rectOldItem);
				return;
			}
		}
	

		if (!m_bMouseOver)
		{
			TCHITTESTINFO hitTest;

			m_bMouseOver = true;
			hitTest.pt = point;

			int iItem = HitTest(&hitTest);
			if (iItem != -1 && m_arrayStatusTab[iItem])
			{
				RECT rectItem;
				GetItemRect(iItem, &rectItem);

				InvalidateRect(&rectItem);
			}
		}
	}
	
	CTabCtrl::OnMouseMove(nFlags, point);
}

void CXTabCtrl::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	POINT pt;
	GetCursorPos(&pt);
	CRect rectItem, rectScreen;

	GetItemRect(m_iIndexMouseOver, rectItem);
	rectScreen = rectItem;
	ClientToScreen(rectScreen);
	
	// If mouse leaves, show normal
	if (!rectScreen.PtInRect(pt)) 
	{
		KillTimer (1);
		m_bMouseOver = false;
		m_iIndexMouseOver = -1;
		InvalidateRect(rectItem);
	}


	CTabCtrl::OnTimer(nIDEvent);
}

void CXTabCtrl::ChangeTab(int iIndex, CWnd *pNewTab, LPTSTR lpszCaption, int iImage)
{
	ASSERT_VALID(pNewTab);

	TCITEM item;
	item.mask = TCIF_TEXT|TCIF_PARAM|TCIF_IMAGE;
	item.lParam = (LPARAM) pNewTab;
	item.pszText = lpszCaption;
	item.iImage = iImage;

	//** update item 
	VERIFY(SetItem(iIndex, &item));

	pNewTab->SetWindowPos(NULL, m_ptTabs.x, m_ptTabs.y , 0, 0,
						SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOZORDER);
	
	pNewTab->ShowWindow(SW_HIDE);

	//** the initial status is enabled
	m_arrayStatusTab[iIndex] = TRUE; 

	//** updates the screen
	GetItem(GetCurSel(), &item);
	((CWnd*)item.lParam)->ShowWindow(SW_SHOW);
}

BOOL CXTabCtrl::SelectTabByName(LPCTSTR lpszTabCaption)
{
	TCHAR szName[64];
	TCITEM item;
	
	memset(&item, 0, sizeof(item));

	item.mask       = TCIF_TEXT;
	item.cchTextMax = sizeof(szName);
	item.pszText    = szName;

	for (int i=0; i < GetItemCount(); i++)
	{
		GetItem(i, &item);

		if (_wcsicmp(lpszTabCaption, item.pszText) == 0)
			return SelectTab(i);
	}

	return FALSE;
}

BOOL CXTabCtrl::SelectNextTab(BOOL bForward)
{
	int iSum = bForward ? 1 : -1;

	int iCurSel = GetCurSel();
	int iCurSelSave(iCurSel);

	do
	{
		iCurSel += iSum;

		if (iCurSel < 0 || iCurSel == GetItemCount())
			return FALSE;

		if (IsTabEnabled(iCurSel))
		{
			if (iCurSel < GetItemCount())
			{
				SelectTab(iCurSel);

				return TRUE;
			}

			return FALSE;
		}

	}
	while (iCurSel != iCurSelSave);
	
	return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲成人av每日更新| 中文字幕在线观看不卡视频| 国产一区二区三区最好精华液| 国产精品乱码人人做人人爱| 欧美日韩不卡一区| 成人久久视频在线观看| 石原莉奈在线亚洲三区| 亚洲欧洲精品成人久久奇米网| 欧美乱妇一区二区三区不卡视频 | a级高清视频欧美日韩| 天天免费综合色| 亚洲欧美在线视频观看| 日韩精品中文字幕一区二区三区 | 国产一区在线不卡| 无码av免费一区二区三区试看 | 日韩二区三区在线观看| 亚洲欧洲综合另类| 久久久久久久久一| 91精品国产一区二区人妖| 色成年激情久久综合| 成人黄色a**站在线观看| 久久不见久久见中文字幕免费| 亚洲国产精品精华液网站| 中文久久乱码一区二区| 精品久久人人做人人爰| 欧美日韩精品三区| 欧洲色大大久久| 一本大道久久a久久综合| 成人av手机在线观看| 国产成人综合自拍| 国产精品一区二区不卡| 精品无人区卡一卡二卡三乱码免费卡| 亚洲sss视频在线视频| 一区二区高清在线| 亚洲精品中文字幕乱码三区| 男男成人高潮片免费网站| 亚洲乱码日产精品bd| 久久久另类综合| 久久久亚洲精品石原莉奈| 亚洲精品在线观看视频| 久久只精品国产| 亚洲精品一区二区三区在线观看 | xfplay精品久久| 精品播放一区二区| www成人在线观看| 国产亚洲综合在线| 亚洲国产精华液网站w| 欧美国产97人人爽人人喊| 国产精品污网站| 亚洲欧美另类综合偷拍| 一区二区三区四区在线播放| 一区二区在线观看视频在线观看| 一区二区三区中文在线观看| 亚洲成在人线免费| 日韩av一区二| 国内精品视频一区二区三区八戒 | 成人爽a毛片一区二区免费| 成人永久免费视频| 91在线一区二区| 欧美三区在线视频| 欧美mv日韩mv国产网站app| 久久午夜色播影院免费高清| 久久久久久日产精品| 国产精品国模大尺度视频| 一区二区三区精品在线观看| 午夜国产精品影院在线观看| 麻豆免费看一区二区三区| 国产成人免费视频网站| 99精品视频中文字幕| 欧美日韩aaa| 欧美精品一区视频| 亚洲欧美一区二区三区极速播放 | 国产美女视频一区| av在线播放不卡| 欧美日韩国产综合草草| 欧美大片在线观看| 亚洲欧洲另类国产综合| 婷婷久久综合九色综合伊人色| 久久精品国产成人一区二区三区 | 韩国成人在线视频| 99re在线精品| 欧美一区二区免费视频| 国产精品网友自拍| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美成人精品1314www| 国产精品国产三级国产普通话蜜臀 | 国产精品一品视频| 在线观看亚洲成人| 久久久久久久久久电影| 亚洲午夜久久久久久久久电影院| 老司机午夜精品| 91视视频在线直接观看在线看网页在线看| 欧美日韩不卡在线| 自拍偷拍亚洲综合| 美女网站一区二区| 91女人视频在线观看| 亚洲精品一区二区三区99| 亚洲自拍偷拍图区| 国产精品123| 日韩欧美一级二级三级久久久| 国产精品久久久久一区二区三区共| 午夜精品一区二区三区电影天堂| 成人激情综合网站| 欧美v亚洲v综合ⅴ国产v| 亚洲欧美福利一区二区| 国产美女娇喘av呻吟久久| 欧美日韩国产一二三| 中文字幕欧美一区| 国产福利一区二区三区视频在线| 欧美福利视频一区| 亚洲日本一区二区| jizzjizzjizz欧美| 久久久久国产精品厨房| 免费在线观看一区| 欧美日韩专区在线| 亚洲精品成人精品456| 国产成人综合亚洲网站| 精品久久久久久久久久久久久久久 | 免费欧美在线视频| 欧美影院午夜播放| 中文字幕在线观看不卡| 国产成人精品亚洲777人妖| 日韩一级大片在线| 香蕉影视欧美成人| 欧美日韩在线播放三区| 一区二区三区在线观看视频| 99久久国产综合精品麻豆| 国产欧美日韩综合精品一区二区| 久久精品国产久精国产| 日韩欧美国产成人一区二区| 秋霞成人午夜伦在线观看| 91精品国产一区二区三区| 日韩精品91亚洲二区在线观看| 欧美网站大全在线观看| 一区二区三区日本| 欧美性生活久久| 亚洲国产日韩av| 欧美另类一区二区三区| 天天综合网 天天综合色| 欧美精品少妇一区二区三区| 亚洲成人中文在线| 欧美人与z0zoxxxx视频| 男男gaygay亚洲| 久久伊99综合婷婷久久伊| 狠狠色综合播放一区二区| 欧美精品一区二区久久久| 国产老女人精品毛片久久| 久久久不卡网国产精品一区| 国产精品99久| 亚洲欧美日韩一区二区| 欧洲激情一区二区| 肉色丝袜一区二区| 精品久久久久久无| 成人一区二区三区视频在线观看| 中文字幕一区在线观看视频| 91久久线看在观草草青青| 亚洲成人手机在线| 精品美女在线播放| 成人动漫一区二区在线| 亚洲一区二区3| 欧美一区二区成人6969| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美日韩黄色影视| 免费不卡在线视频| 国产色婷婷亚洲99精品小说| av在线不卡电影| 天堂一区二区在线免费观看| 精品日韩在线观看| 99久久亚洲一区二区三区青草| 亚洲国产日韩在线一区模特| 日韩亚洲欧美一区| 成人视屏免费看| 天天影视网天天综合色在线播放| 久久久蜜臀国产一区二区| 91啪亚洲精品| 激情文学综合插| 亚洲综合无码一区二区| 精品国产伦一区二区三区观看方式 | 99视频在线精品| 亚洲gay无套男同| 国产亚洲综合性久久久影院| 欧洲一区在线电影| 国产精品综合一区二区| 一区二区视频在线看| 欧美xfplay| 欧美日韩综合在线| www.久久精品| 激情伊人五月天久久综合| 一级女性全黄久久生活片免费| 久久在线免费观看| 欧美日本在线视频| av网站一区二区三区| 另类小说图片综合网| 亚洲一区二区五区| 欧美国产激情一区二区三区蜜月 | 欧美日韩黄色一区二区| 成人综合在线观看| 麻豆成人在线观看| 亚洲国产欧美一区二区三区丁香婷| 欧美国产精品专区|