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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mytabctrl.cpp

?? 《MFC窗口程序設(shè)計(jì)》書籍源碼 詳細(xì)講解MFC框架程序設(shè)計(jì)
?? CPP
字號(hào):
// MyTabCtrl.cpp : implementation file
//
/////////////////////////////////////////////////////
// This class is provided as is and Ben Hill takes no
// responsibility for any loss of any kind in connection
// to this code.
/////////////////////////////////////////////////////
// Is is meant purely as a educational tool and may
// contain bugs.
/////////////////////////////////////////////////////
// ben@shido.fsnet.co.uk
// http://www.shido.fsnet.co.uk
/////////////////////////////////////////////////////
// Thanks to a mystery poster in the C++ forum on 
// www.codeguru.com I can't find your name to say thanks
// for your Control drawing code. If you are that person 
// thank you very much. I have been able to use some of 
// you ideas to produce this sample application.
/////////////////////////////////////////////////////

#include "stdafx.h"
#include "Resource.h"
#include "MyTabCtrl.h"

#include "..\Button\DlgBasic.h"
#include "..\Button\DlgAdvanced.h"
#include "..\Button\DlgTransparent.h"
#include "..\Button\DlgShadeButtonST.h"
#include "..\Button\CustomButton.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMyTabCtrl
DWORD CMyTabCtrl::s_dwCustomLook = 0;
enum { PADDING = 3, EDGE = 20};

CMyTabCtrl::CMyTabCtrl()
{
	::ZeroMemory(&m_tabPages, sizeof(m_tabPages));

	m_tabPages[0]=new CDlgBasic;
	m_tabPages[1]=new CDlgAdvanced;
	m_tabPages[2]=new CDlgTransparent;
	m_tabPages[3]=new CDlgShadeButtonST;
	m_tabPages[4]=new CCustomButton;

	m_nNumberOfPages=5;
}

CMyTabCtrl::~CMyTabCtrl()
{
	for(int nCount=0; nCount < m_nNumberOfPages; nCount++){
		delete m_tabPages[nCount];
	}
}

void CMyTabCtrl::Init()
{
	m_tabCurrent=0;

	m_tabPages[0]->Create(IDD_BASIC, this);
	m_tabPages[1]->Create(IDD_ADVANCED, this);
	m_tabPages[2]->Create(IDD_TRANSPARENT, this);
	m_tabPages[3]->Create(IDD_SHADED, this);
	m_tabPages[4]->Create(IDD_BROWSECTRLDEMO_DIALOG, this);

	m_tabPages[0]->ShowWindow(SW_SHOW);
	m_tabPages[1]->ShowWindow(SW_HIDE);
	m_tabPages[2]->ShowWindow(SW_HIDE);
	m_tabPages[3]->ShowWindow(SW_HIDE);
	m_tabPages[4]->ShowWindow(SW_HIDE);

	SetRectangle();
}

void CMyTabCtrl::SetRectangle()
{
	CRect tabRect, itemRect;
	int nX, nY, nXc, nYc;

	GetClientRect(&tabRect);
	GetItemRect(0, &itemRect);

	nX=itemRect.left;
	nY=itemRect.bottom+1;
	nXc=tabRect.right-itemRect.left-1;
	nYc=tabRect.bottom-nY-1;

	m_tabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
	for(int nCount=1; nCount < m_nNumberOfPages; nCount++)
	{
		m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
	}
}

BEGIN_MESSAGE_MAP(CMyTabCtrl, CBaseTabCtrl)
	//{{AFX_MSG_MAP(CMyTabCtrl)
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyTabCtrl message handlers

void CMyTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CBaseTabCtrl::OnLButtonDown(nFlags, point);

	if(m_tabCurrent != GetCurFocus()){
		m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE);
		m_tabCurrent=GetCurFocus();
		m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW);
		m_tabPages[m_tabCurrent]->SetFocus();
	}
}

void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpdis)
{
	TC_ITEM     tci;
	CDC* pDC = CDC::FromHandle(lpdis->hDC);
	HIMAGELIST hilTabs = (HIMAGELIST)TabCtrl_GetImageList(GetSafeHwnd());

	BOOL bSelected = (lpdis->itemID == (UINT)GetCurSel());
	BOOL bColor = (s_dwCustomLook & ETC_COLOR);

	CRect rItem(lpdis->rcItem);

	if (bSelected)
		rItem.bottom -= 1;
	else
		rItem.bottom += 2;

	// tab
	// blend from back color to COLOR_3DFACE if 16 bit mode or better
	COLORREF crFrom = GetTabColor(bSelected);
	
	if (s_dwCustomLook & ETC_GRADIENT && pDC->GetDeviceCaps(BITSPIXEL) >= 16)
	{
		COLORREF crTo = bSelected ? ::GetSysColor(COLOR_3DFACE) : Darker(!bColor || m_crBack == -1 ? ::GetSysColor(COLOR_3DFACE) : m_crBack, 0.7f);

		int nROrg = GetRValue(crFrom);
		int nGOrg = GetGValue(crFrom);
		int nBOrg = GetBValue(crFrom);
		int nRDiff = GetRValue(crTo) - nROrg;
		int nGDiff = GetGValue(crTo) - nGOrg;
		int nBDiff = GetBValue(crTo) - nBOrg;
		
		int nHeight = rItem.Height();

		for (int nLine = 0; nLine < nHeight; nLine += 2)
		{
			int nRed = nROrg + (nLine * nRDiff) / nHeight;
			int nGreen = nGOrg + (nLine * nGDiff) / nHeight;
			int nBlue = nBOrg + (nLine * nBDiff) / nHeight;
			
			pDC->FillSolidRect(CRect(rItem.left, rItem.top + nLine, rItem.right, rItem.top + nLine + 2), 
								RGB(nRed, nGreen, nBlue));
		}
	}
	else // simple solid fill
		pDC->FillSolidRect(rItem, crFrom);

	// text & icon
	rItem.left += PADDING;
	rItem.top += PADDING + (bSelected ? 1 : 0);

	pDC->SetBkMode(TRANSPARENT);

	CString sTemp;
	tci.mask        = TCIF_TEXT | TCIF_IMAGE;
	tci.pszText     = sTemp.GetBuffer(100);
	tci.cchTextMax  = 99;
	GetItem(lpdis->itemID, &tci);
	sTemp.ReleaseBuffer();

	// icon
	if (hilTabs)
	{
		ImageList_Draw(hilTabs, tci.iImage, *pDC, rItem.left, rItem.top, ILD_TRANSPARENT);
		rItem.left += 16 + PADDING;
	}

	// text
	rItem.right -= PADDING;
	FormatText(sTemp, pDC, rItem.Width());

	pDC->SetTextColor(GetTabTextColor(bSelected));
	pDC->DrawText(sTemp, rItem, DT_NOPREFIX | DT_LEFT);
}

void CMyTabCtrl::DrawItemBorder(LPDRAWITEMSTRUCT lpdis)
{
	ASSERT (s_dwCustomLook & ETC_FLAT);

	BOOL bSelected = (lpdis->itemID == (UINT)GetCurSel());
	BOOL bBackTabs = (s_dwCustomLook & ETC_BACKTABS);

	CRect rItem(lpdis->rcItem);
	CDC* pDC = CDC::FromHandle(lpdis->hDC); 

	COLORREF crTab = GetTabColor(bSelected);
	COLORREF crHighlight = Lighter(crTab, 1.5f);
	COLORREF crShadow = Darker(crTab, 0.75f);

	if (bSelected || bBackTabs)
	{
		rItem.bottom += bSelected ? -1 : 1;

		// edges
		pDC->FillSolidRect(CRect(rItem.left, rItem.top, rItem.left + 1, rItem.bottom), crHighlight);
		pDC->FillSolidRect(CRect(rItem.left, rItem.top, rItem.right, rItem.top + 1), crHighlight);
		pDC->FillSolidRect(CRect(rItem.right - 1, rItem.top, rItem.right, rItem.bottom), crShadow);
	}
	else // draw simple dividers
	{
		pDC->FillSolidRect(CRect(rItem.left - 1, rItem.top, rItem.left, rItem.bottom), crShadow);
		pDC->FillSolidRect(CRect(rItem.right - 1, rItem.top, rItem.right, rItem.bottom), crShadow);
	}
}

void CMyTabCtrl::DrawMainBorder(LPDRAWITEMSTRUCT lpdis)
{
	CRect rBorder(lpdis->rcItem);
	CDC* pDC = CDC::FromHandle(lpdis->hDC); 

	COLORREF crTab = GetTabColor();
	COLORREF crHighlight = Lighter(crTab, 1.5f);
	COLORREF crShadow = Darker(crTab, 0.75f);

	pDC->Draw3dRect(rBorder, crHighlight, crShadow);
}

COLORREF CMyTabCtrl::GetTabColor(BOOL bSelected)
{
	BOOL bColor = (s_dwCustomLook & ETC_COLOR);
	BOOL bHiliteSel = (s_dwCustomLook & ETC_SELECTION);
	BOOL bBackTabs = (s_dwCustomLook & ETC_BACKTABS);
	BOOL bFlat = (s_dwCustomLook & ETC_FLAT);

	if (bSelected && bHiliteSel)
	{
		if (bColor)
			return Lighter((m_crBack == -1) ? ::GetSysColor(COLOR_3DFACE) : m_crBack, 1.4f);
		else
			return Lighter(::GetSysColor(COLOR_3DFACE), 1.4f);
	}
	else if (!bSelected)
	{
		if (bBackTabs || !bFlat)
		{
			if (bColor)
				return Darker((m_crBack == -1) ? ::GetSysColor(COLOR_3DFACE) : m_crBack, 0.9f);
			else
				return Darker(::GetSysColor(COLOR_3DFACE), 0.9f);
		}
		else
			return (m_crBack == -1) ? ::GetSysColor(COLOR_3DFACE) : m_crBack;
	}

	// else
	return ::GetSysColor(COLOR_3DFACE);
}

COLORREF CMyTabCtrl::GetTabTextColor(BOOL bSelected)
{
	BOOL bColor = (s_dwCustomLook & ETC_COLOR);
	BOOL bFlat = (s_dwCustomLook & ETC_FLAT);

	if (bSelected)
	{
		return ::GetSysColor(COLOR_WINDOWTEXT);
	}
	else
	{
		if (bColor || bFlat)
			return Darker((m_crBack == -1) ? ::GetSysColor(COLOR_3DFACE) : m_crBack, 0.5f);
		else
			return Darker(::GetSysColor(COLOR_3DFACE), 0.5f);
	}

	// else
	return Darker(::GetSysColor(COLOR_3DFACE), 0.5f);
}

void CMyTabCtrl::EnableCustomLook(BOOL bEnable, DWORD dwStyle)
{
	if (!bEnable)
		dwStyle = 0;

	s_dwCustomLook = dwStyle;
}

void CMyTabCtrl::PreSubclassWindow() 
{
	CBaseTabCtrl::PreSubclassWindow();

	if (s_dwCustomLook)
		ModifyStyle(0, TCS_OWNERDRAWFIXED);
}

COLORREF CMyTabCtrl::Darker(COLORREF crBase, float fFactor)
{
	ASSERT (fFactor < 1.0f && fFactor > 0.0f);
	
	fFactor = min(fFactor, 1.0f);
	fFactor = max(fFactor, 0.0f);
	
	BYTE bRed, bBlue, bGreen;
	BYTE bRedShadow, bBlueShadow, bGreenShadow;
	
	bRed = GetRValue(crBase);
	bBlue = GetBValue(crBase);
	bGreen = GetGValue(crBase);
	
	bRedShadow = (BYTE)(bRed * fFactor);
	bBlueShadow = (BYTE)(bBlue * fFactor);
	bGreenShadow = (BYTE)(bGreen * fFactor);
	
	return RGB(bRedShadow, bGreenShadow, bBlueShadow);
}

COLORREF CMyTabCtrl::Lighter(COLORREF crBase, float fFactor) 
{
	ASSERT (fFactor > 1.0f);
	
	fFactor = max(fFactor, 1.0f);
	
	BYTE bRed, bBlue, bGreen;
	BYTE bRedHilite, bBlueHilite, bGreenHilite;
	
	bRed = GetRValue(crBase);
	bBlue = GetBValue(crBase);
	bGreen = GetGValue(crBase);
	
	bRedHilite = (BYTE)min((int)(bRed * fFactor), 255);
	bBlueHilite = (BYTE)min((int)(bBlue * fFactor), 255);
	bGreenHilite = (BYTE)min((int)(bGreen * fFactor), 255);
	
	return RGB(bRedHilite, bGreenHilite, bBlueHilite);
}

CSize CMyTabCtrl::FormatText(CString& sText, CDC* pDC, int nWidth)
{
	CRect rect(0, 0, nWidth, 20);
	UINT uFlags = DT_CALCRECT | DT_SINGLELINE | DT_MODIFYSTRING | DT_END_ELLIPSIS;
	
	::DrawText(pDC->GetSafeHdc(), sText.GetBuffer(sText.GetLength() + 4), -1, rect, uFlags);
	sText.ReleaseBuffer();
	
	return pDC->GetTextExtent(sText);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧亚洲嫩模精品一区三区| 成人毛片视频在线观看| 91在线丨porny丨国产| 欧美xxx久久| 亚洲一区中文日韩| 国产成人综合自拍| 日韩一区二区在线观看视频| 亚洲美女视频在线观看| 国产一区二区福利视频| 在线成人av影院| 亚洲男人的天堂在线观看| 狠狠网亚洲精品| 91精品国产色综合久久不卡蜜臀| 亚洲欧洲综合另类| 大美女一区二区三区| 精品国产三级电影在线观看| 午夜伊人狠狠久久| 日本精品一级二级| 亚洲人123区| 成人深夜在线观看| 国产免费观看久久| 久久99国产精品久久99| 在线不卡免费欧美| 亚洲国产精品尤物yw在线观看| 成人sese在线| 中文字幕欧美区| 国产精品影视在线| 日韩精品一区二区三区四区| 手机精品视频在线观看| 欧美亚洲国产bt| 一个色在线综合| 一本色道**综合亚洲精品蜜桃冫 | 97久久超碰国产精品| 国产欧美视频在线观看| 精品无人码麻豆乱码1区2区 | 精品久久久久久久人人人人传媒| 天天综合色天天| 欧美日韩精品一区二区三区四区| 亚洲尤物在线视频观看| 欧美亚洲自拍偷拍| 亚洲一区免费视频| 欧美曰成人黄网| 亚洲国产精品久久不卡毛片| 欧美亚洲高清一区二区三区不卡| 亚洲一区免费在线观看| 欧美中文字幕一区二区三区| 一区二区三区精品| 欧美日韩一区二区三区在线| 亚洲成人av福利| 欧美精三区欧美精三区| 免费精品视频在线| 精品久久99ma| 国产黄人亚洲片| 国产精品久久久久久久久免费丝袜 | 亚洲免费观看高清完整版在线观看熊 | 成人免费观看视频| 国产精品久久久久aaaa樱花| av一区二区三区四区| 亚洲色图制服诱惑| 欧美性猛交xxxx黑人交| 青青青爽久久午夜综合久久午夜| 日韩欧美的一区| 国产精华液一区二区三区| 国产精品你懂的在线| 97se亚洲国产综合自在线不卡| 亚洲永久精品国产| 欧美夫妻性生活| 国产在线看一区| 中文字幕视频一区二区三区久| 色婷婷久久久亚洲一区二区三区| 亚洲国产一区在线观看| 91精品国产麻豆国产自产在线 | 日韩国产一二三区| 精品国产三级a在线观看| 国产69精品久久久久777| 亚洲免费在线视频| 91麻豆精品国产91久久久久久| 韩日欧美一区二区三区| 国产精品美女www爽爽爽| 日本电影亚洲天堂一区| 日本在线不卡视频| 久久精品日产第一区二区三区高清版| 丁香桃色午夜亚洲一区二区三区 | 精品国产一区二区三区av性色| 国产成人综合在线| 一区二区三区四区中文字幕| 欧美一区二区三区小说| 国产成人午夜精品5599| 亚洲综合无码一区二区| 日韩欧美国产综合在线一区二区三区| 国产福利一区二区三区视频 | 国产精品久久久久久久久搜平片| 欧美唯美清纯偷拍| 国产精品综合二区| 伊人一区二区三区| 精品国产sm最大网站免费看| 91免费视频大全| 日本中文字幕一区| 日韩久久一区二区| 日韩欧美国产成人一区二区| 成人的网站免费观看| 日韩激情一二三区| 中文字幕在线视频一区| 欧美日韩三级视频| 成人一级片网址| 日本特黄久久久高潮| 国产精品福利影院| 欧美一区二区三区四区在线观看| www.成人网.com| 蜜桃在线一区二区三区| 亚洲欧美另类图片小说| 久久久久久电影| 欧美日本在线视频| 成人久久18免费网站麻豆| 麻豆精品蜜桃视频网站| 亚洲乱码精品一二三四区日韩在线| 精品入口麻豆88视频| 欧美在线免费视屏| 国产成人精品aa毛片| 免费成人在线网站| 亚洲最快最全在线视频| 亚洲国产高清在线| 精品处破学生在线二十三| 欧美亚洲禁片免费| 99这里都是精品| 国产高清精品在线| 麻豆专区一区二区三区四区五区| 亚洲国产精品自拍| 亚洲免费观看高清完整版在线观看熊 | 成人黄页毛片网站| 精品伊人久久久久7777人| 婷婷夜色潮精品综合在线| 中文字幕一区二区三中文字幕 | 欧美日韩综合在线| jiyouzz国产精品久久| 国产麻豆视频精品| 日韩va欧美va亚洲va久久| 亚洲国产综合在线| 亚洲免费在线播放| 亚洲视频一区二区在线| 中文字幕第一区第二区| 久久久精品人体av艺术| 精品国产伦理网| 日韩一区二区三区电影在线观看| 欧美色中文字幕| 欧美亚一区二区| 欧美亚洲日本一区| 欧美亚洲精品一区| 欧美亚洲国产一区在线观看网站| 91行情网站电视在线观看高清版| av亚洲精华国产精华| jvid福利写真一区二区三区| www.久久精品| 91污在线观看| 一本到三区不卡视频| 91麻豆蜜桃一区二区三区| 99re6这里只有精品视频在线观看| 成人黄色在线网站| 97se狠狠狠综合亚洲狠狠| 91视视频在线直接观看在线看网页在线看| 成人小视频免费观看| 成人黄色网址在线观看| bt7086福利一区国产| 99精品一区二区| 在线免费视频一区二区| 欧美无砖砖区免费| 91.麻豆视频| 精品国产91久久久久久久妲己| 精品国产网站在线观看| 国产亚洲欧美一区在线观看| 国产精品嫩草久久久久| 亚洲欧洲成人精品av97| 亚洲精品福利视频网站| 亚洲尤物在线视频观看| 日韩精品久久理论片| 精品一区二区三区日韩| 国产麻豆视频精品| 99久久婷婷国产综合精品 | 国产乱码字幕精品高清av| 国产成人av电影在线观看| 成人看片黄a免费看在线| 91在线一区二区| 欧美日韩不卡在线| 日韩欧美国产一区二区三区| 国产亚洲综合av| 亚洲天天做日日做天天谢日日欢| 亚洲一区中文在线| 老司机午夜精品99久久| 岛国精品在线观看| 91福利视频在线| 欧美变态tickling挠脚心| 国产午夜精品在线观看| 最新久久zyz资源站| 天天色综合天天| 国产一区二区三区在线看麻豆| 丁香啪啪综合成人亚洲小说| 在线观看亚洲精品| 欧美不卡一区二区三区| 一色屋精品亚洲香蕉网站| 三级欧美韩日大片在线看|