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

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

?? skintab.cpp

?? 一個界面類似QQ界面的小程序
?? CPP
字號:
/************************************************************************ 
* 文件名:    SkinTab.cpp 
* 文件描述:  圖片TAB 
* 創建人:    黃銳坤(Nuk), 2006年08月28日
* 版本號:    1.0 
************************************************************************/ 
// SkinTab.cpp : 實現文件
//

#include "stdafx.h"

#include "SkinTab.h"


// CSkinTab

IMPLEMENT_DYNAMIC(CSkinTab, CStatic)

CSkinTab::CSkinTab()
{
	m_pTabRect= NULL;
	m_nTabCount=0;
	m_nCurDownIndex=-1;
	m_nCurOverIndex=-1;
	lpET=new   TRACKMOUSEEVENT;  
	m_pTabBmpNormal=NULL;
	m_pTabBmpOver=NULL;
	m_pTabBmpDown=NULL;
	m_phIcon = NULL;
	m_bDCStored = false;
}

CSkinTab::~CSkinTab()
{
	if (m_pTabRect)
		delete []m_pTabRect;
	if(lpET)
		delete lpET;
	if (m_pTabBmpNormal)
		delete []m_pTabBmpNormal;
	if (m_pTabBmpOver)
		delete []m_pTabBmpOver;
	if (m_pTabBmpDown)
		delete []m_pTabBmpDown;
	if (m_phIcon)
		delete []m_phIcon;
	m_memDC.DeleteDC();
}


BEGIN_MESSAGE_MAP(CSkinTab, CStatic)
	ON_WM_PAINT()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_ERASEBKGND()
END_MESSAGE_MAP()



// CSkinTab 消息處理程序



void CSkinTab::PreSubclassWindow()
{
	// TODO: 在此添加專用代碼和/或調用基類
	ModifyStyle(0, SS_NOTIFY);

	CStatic::PreSubclassWindow();
}

void CSkinTab::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此處添加消息處理程序代碼
	CRect r;
	GetClientRect(&r);	

	CDC memDC;
	memDC.CreateCompatibleDC(&dc);
	CBitmap btScreen;
	btScreen.CreateCompatibleBitmap(&dc, r.Width(), r.Height());
	memDC.SelectObject(&btScreen);
	btScreen.DeleteObject();

	//畫背景 
	memDC.BitBlt(r.left, r.top, r.Width(), r.Height(), &m_memDC, 0, 0, SRCCOPY);

	//memDC.Rectangle(r);
	for(int i=0;i<m_nTabCount;i++)
	{
		CRect rect=m_pTabRect[m_nTabCount-i-1];
		rect.bottom+=4;
		if(m_nCurOverIndex==m_nTabCount-i-1)
			DrawBitmap(&memDC,m_pTabBmpOver[m_nTabCount-i-1],rect);
		else
			DrawBitmap(&memDC,m_pTabBmpNormal[m_nTabCount-i-1],rect);
		DrawIcon(&memDC,m_phIcon[m_nTabCount-i-1],rect,D_TOP);
	}
	if(m_nCurDownIndex!=-1)
	{
		CRect rect=m_pTabRect[m_nCurDownIndex];
		rect.bottom+=4;
		DrawBitmap(&memDC,m_pTabBmpDown[m_nCurDownIndex],rect);
		DrawIcon(&memDC,m_phIcon[m_nCurDownIndex],rect,D_TOP);
	}

	dc.BitBlt(r.left, r.top, r.Width(), r.Height(), &memDC, 0, 0, SRCCOPY);

	memDC.DeleteDC();
	// 不為繪圖消息調用 CStatic::OnPaint()
}

void CSkinTab::SetCount(int nCount)
{
	m_nTabCount = nCount;

	if (m_pTabBmpNormal)
		delete []m_pTabBmpNormal;
	m_pTabBmpNormal = new CBitmap[m_nTabCount];

	if (m_pTabBmpOver)
		delete []m_pTabBmpOver;
	m_pTabBmpOver = new CBitmap[m_nTabCount];

	if (m_pTabBmpDown)
		delete []m_pTabBmpDown;
	m_pTabBmpDown = new CBitmap[m_nTabCount];

	if (m_phIcon)
		delete []m_phIcon;
	m_phIcon = new HICON[m_nTabCount];

	if (m_pTabRect)
		delete []m_pTabRect;
	m_pTabRect = new CRect[m_nTabCount];

}

void CSkinTab::SetRect(int nIndex, CRect rc)
{
	ASSERT(nIndex < m_nTabCount);
	m_pTabRect[nIndex] = rc;
}

void CSkinTab::SetIcon(int nIndex, CString strIcon)
{
	ASSERT(nIndex < m_nTabCount);
	m_phIcon[nIndex] = (HICON)::LoadImage(AfxGetApp()->m_hInstance,strIcon,IMAGE_ICON,24,24,LR_LOADFROMFILE); 
}

void CSkinTab::SetIcon(int nIndex, UINT nIconID)
{
}

void CSkinTab::SetSkin(int nIndex, CString strNormal, CString strOver, CString strDown)
{
	ASSERT(nIndex < m_nTabCount);

	if (m_pTabBmpNormal[nIndex].m_hObject)
		m_pTabBmpNormal[nIndex].Detach();
	if (m_pTabBmpOver[nIndex].m_hObject)
		m_pTabBmpOver[nIndex].Detach();
	if (m_pTabBmpDown[nIndex].m_hObject)
		m_pTabBmpDown[nIndex].Detach();

	HBITMAP bm = (HBITMAP)::LoadImage(NULL,strNormal,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
	m_pTabBmpNormal[nIndex].Attach(bm);
	bm = (HBITMAP)::LoadImage(NULL,strOver,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
	m_pTabBmpOver[nIndex].Attach(bm);
	bm = (HBITMAP)::LoadImage(NULL,strDown,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
	m_pTabBmpDown[nIndex].Attach(bm);
}

void CSkinTab::SetSkin(int nIndex, UINT nNormalID, UINT nOverID, UINT nDownID)
{
	ASSERT(nIndex < m_nTabCount);

	if (m_pTabBmpNormal[nIndex].m_hObject)
		m_pTabBmpNormal[nIndex].Detach();
	if (m_pTabBmpOver[nIndex].m_hObject)
		m_pTabBmpOver[nIndex].Detach();
	if (m_pTabBmpDown[nIndex].m_hObject)
		m_pTabBmpDown[nIndex].Detach();

	m_pTabBmpNormal[nIndex].LoadBitmap(nNormalID);
	m_pTabBmpOver[nIndex].LoadBitmap(nOverID);
	m_pTabBmpDown[nIndex].LoadBitmap(nDownID);
}

int CSkinTab::GetBitmapWidth (HBITMAP hBitmap)
{ 
	BITMAP bm;
	GetObject(hBitmap,sizeof(BITMAP),(PSTR)&bm); 
	return bm.bmWidth;
}

int CSkinTab::GetBitmapHeight (HBITMAP hBitmap)
{ 
	BITMAP bm;
	GetObject(hBitmap,sizeof(BITMAP),(PSTR)&bm); 
	return bm.bmHeight;
}

void CSkinTab::DrawIcon(CDC* dc, HICON hIcon,CRect rect , UINT align)
{
	RECT r;
	r.left = rect.left;
	r.top = rect.top;
	r.right = rect.right;
	r.bottom = rect.bottom;
	if(hIcon!=NULL)
	{
		int ix,iy;
		switch(align)
		{
		case 2:
			ix=(r.right-r.left-24+1)/2;//水平居中
			iy=r.top+2;//垂直置頂
			break;
		case 4:
			ix=r.left+2;//水平左置
			iy=(r.bottom-r.top-24+1)/2;//垂直居中
			break;
		default:
			ix =0;
			iy =0;
		}
		DrawIconEx(dc->m_hDC,ix,iy,hIcon,24,24,0, NULL, DI_NORMAL); 
	}
}

void CSkinTab::DrawBitmap(CDC* dc, HBITMAP hbmp, CRect rect)
{
	RECT r;
	r.left = rect.left;
	r.top = rect.top;
	r.right = rect.right;
	r.bottom = rect.bottom;

	if(!hbmp) 
		return;

	int cx=r.right  - r.left;
	int cy=r.bottom - r.top;
	int xbmp = GetBitmapWidth(hbmp);
	int ybmp = GetBitmapHeight(hbmp);

	CDC		 l_BufferDC ;
			 l_BufferDC.CreateCompatibleDC( dc) ;
	CBitmap  l_BufferBitmap ;
			 l_BufferBitmap.CreateCompatibleBitmap( dc, cx, cy ) ;
	CBitmap* l_pOldBufferBitmap = l_BufferDC.SelectObject( &l_BufferBitmap ) ;

	CDC		 l_MaskDC ;
			 l_MaskDC.CreateCompatibleDC( dc ) ;
	CBitmap  l_MaskBitmap ;
			 l_MaskBitmap.CreateBitmap( cx, cy, 1, 1, NULL ) ;
	CBitmap* l_pOldMaskBitmap = l_MaskDC.SelectObject( &l_MaskBitmap ) ;

	#define ROP4_TRANSPARENTBLIT		0xCCAA0020
	#define SRCMASK						0x00220326

	l_BufferDC.FillSolidRect( r.left,r.top,r.right,r.bottom, RGB( 255, 0, 255 ) ) ;

	CDC		 l_MemoryDC ;
			 l_MemoryDC.CreateCompatibleDC( dc) ;
	l_MemoryDC.SelectObject(hbmp) ;

	////畫圖標
	//RECT rico;
	//rico.left=0;
	//rico.top = 0;
	//rico.right = xbmp;
	//rico.bottom = ybmp;
	//DrawIcon(&l_MemoryDC,rico,D_TOP);

	////畫標題
	//RECT rbmp;
	//rbmp.left=0;
	//rbmp.top = 0;
	//rbmp.right = xbmp;
	//rbmp.bottom = ybmp;
	//DrawTitle(&l_MemoryDC, rbmp);

	l_BufferDC.BitBlt( 0, 0, cx, cy, &l_MemoryDC, 0, 0, SRCCOPY ) ;

	COLORREF l_crOldBack = l_BufferDC.SetBkColor( RGB( 255, 0, 255 ) ) ;

	l_MaskDC.BitBlt( 0, 0, cx, cy, &l_BufferDC, 0, 0, SRCCOPY ) ;

	l_BufferDC.SetBkColor( l_crOldBack ) ;

	if(!dc->MaskBlt( r.left, r.top, cx,cy,&l_BufferDC,0,0,l_MaskBitmap,0,0,ROP4_TRANSPARENTBLIT ) )
	{
		CDC		 l_CopyDC ;
				 l_CopyDC.CreateCompatibleDC( dc ) ;
		CBitmap  l_CopyBitmap ;
				 l_CopyBitmap.CreateCompatibleBitmap(dc, cx, cy ) ;
		CBitmap* l_pOldCopyBitmap = l_CopyDC.SelectObject( &l_CopyBitmap ) ;

		l_CopyDC.BitBlt(   0, 0, cx, cy, dc,  0, 0, SRCCOPY  ) ;
		l_CopyDC.BitBlt(   0, 0, cx, cy, &l_MaskDC,   0, 0, SRCAND   ) ;
		l_BufferDC.BitBlt( 0, 0, cx, cy, &l_MaskDC,   0, 0, SRCMASK  ) ;
		l_CopyDC.BitBlt(   0, 0, cx, cy, &l_BufferDC, 0, 0, SRCPAINT ) ;
		dc->BitBlt(  0, 0, cx, cy, &l_CopyDC,   0, 0, SRCCOPY  ) ;

		l_CopyDC.SelectObject( l_pOldCopyBitmap ) ;
	}
}

void CSkinTab::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值
	for(int i=0; i<m_nTabCount; i++)
	{
		if (m_pTabRect[i].PtInRect(point) && m_nCurOverIndex != i)
		{
			m_nCurOverIndex = i;
			Invalidate();
			break;
		}
	}
 
	lpET->cbSize=sizeof(TRACKMOUSEEVENT);   
	lpET->dwFlags=TME_LEAVE;   
	lpET->dwHoverTime=NULL;   
	lpET->hwndTrack=this->m_hWnd;  
	_TrackMouseEvent(lpET);   

	CStatic::OnMouseMove(nFlags, point);
}

void CSkinTab::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值
	for(int i=0; i<m_nTabCount; i++)
	{
		if (m_pTabRect[i].PtInRect(point) && m_nCurDownIndex != i)
		{
			m_nCurDownIndex = i;
			Invalidate();
			GetParent()->PostMessageW(WM_TAB_SELECT,NULL,m_nCurDownIndex);
			break;
		}
	}
	CStatic::OnLButtonDown(nFlags, point);
}

BOOL CSkinTab::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 在此添加專用代碼和/或調用基類
	if(pMsg->message==WM_MOUSELEAVE)   
	{   
		m_nCurOverIndex=-1; 
		Invalidate();
	}   

	return CStatic::PreTranslateMessage(pMsg);
}


BOOL CSkinTab::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值
	if(!m_bDCStored)
	{
    	CRect  rect;
	    GetClientRect(&rect);

		m_memDC.CreateCompatibleDC (pDC);
		CBitmap	btScreen;
		btScreen.CreateCompatibleBitmap (pDC,rect.Width(),rect.Height());
		m_memDC.SelectObject (&btScreen);

		m_memDC.BitBlt (0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);

		m_bDCStored=true;

		btScreen.DeleteObject();
	}
	return TRUE;// CButton::OnEraseBkgnd(pDC);//
	return CStatic::OnEraseBkgnd(pDC);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产老女人精品毛片久久| 亚洲免费观看高清| 国产精品小仙女| 精品一区二区三区欧美| 国产不卡在线一区| 色综合久久久久综合99| 色欧美片视频在线观看| 欧美一二三区精品| 26uuu国产一区二区三区| 国产精品美女久久久久久久| 午夜精品久久久久久久99樱桃| 激情综合一区二区三区| 91啦中文在线观看| 国产亚洲制服色| 丝袜美腿亚洲综合| 日本久久电影网| 久久精品欧美一区二区三区麻豆| 亚洲乱码国产乱码精品精的特点 | 91麻豆精品国产| 国产精品日日摸夜夜摸av| 亚洲国产精品人人做人人爽| 成人h动漫精品| 欧美日韩精品一区二区天天拍小说| 国产偷国产偷精品高清尤物| 美女视频免费一区| 欧美色手机在线观看| 国产女人18水真多18精品一级做| 男人操女人的视频在线观看欧美| 欧美视频一区在线观看| 国产精品久久久久精k8| 国产精品综合在线视频| 日韩精品中文字幕在线不卡尤物| 亚洲第一激情av| 日本韩国视频一区二区| 亚洲日本成人在线观看| 成人激情开心网| 欧美不卡一区二区三区四区| 日韩制服丝袜先锋影音| 在线综合视频播放| 亚洲va欧美va人人爽| 在线观看国产日韩| 一区二区三区四区av| 色综合久久久久综合99| 亚洲精品国产一区二区三区四区在线| 成人免费精品视频| 亚洲欧美日韩成人高清在线一区| 大尺度一区二区| 中文字幕在线一区| www.久久久久久久久| 中文字幕人成不卡一区| 色婷婷精品久久二区二区蜜臀av | 亚洲欧洲99久久| 丁香激情综合国产| 一区二区三区在线观看动漫| 欧美在线啊v一区| 亚洲国产视频a| 欧美日韩另类一区| 精品一区二区三区影院在线午夜| 亚洲精品在线一区二区| 国产成人免费在线| 亚洲黄网站在线观看| 7777女厕盗摄久久久| 国产精品系列在线观看| 亚洲欧美激情在线| 91精品啪在线观看国产60岁| 国产又黄又大久久| 亚洲精品国产视频| 精品三级在线观看| 国产成人在线免费| 日韩亚洲欧美综合| 国内外成人在线| 亚洲欧美另类小说| 欧美视频三区在线播放| 日日摸夜夜添夜夜添亚洲女人| 91精品国产综合久久久久久久 | 99国产精品久久久久| 亚洲精选在线视频| 91免费观看视频在线| 亚洲精品国久久99热| 91精品国产色综合久久不卡蜜臀 | 国产精品一品视频| 国产精品久久网站| 99国产欧美另类久久久精品| 午夜精品久久久久久不卡8050| 欧美夫妻性生活| 精品一区在线看| 综合久久国产九一剧情麻豆| 欧美视频一二三区| 国v精品久久久网| 亚洲小说春色综合另类电影| 欧美一二区视频| 国产69精品久久久久777| 日韩一区中文字幕| 7777精品伊人久久久大香线蕉经典版下载 | 精品夜夜嗨av一区二区三区| 中文子幕无线码一区tr| 色老头久久综合| 蜜臀av亚洲一区中文字幕| 中国av一区二区三区| 成人天堂资源www在线| 蜜臀国产一区二区三区在线播放 | 中文子幕无线码一区tr| 欧美精品黑人性xxxx| 国产成人综合精品三级| 中文字幕乱码久久午夜不卡| 日韩亚洲欧美在线观看| 色哟哟国产精品免费观看| 国产在线精品一区二区不卡了| 亚洲精品你懂的| 久久久久久久免费视频了| 91传媒视频在线播放| 国产一区二区三区久久久| 亚洲最新在线观看| 国产肉丝袜一区二区| 91精品国产黑色紧身裤美女| 91精彩视频在线观看| 国产suv精品一区二区6| 欧美aaa在线| 亚洲综合一区二区精品导航| 国产精品入口麻豆原神| 欧美mv日韩mv国产网站app| 在线观看av一区二区| 成人午夜视频免费看| 久久国产精品无码网站| 国产精品另类一区| 欧美丰满嫩嫩电影| 欧美日韩久久久久久| 不卡的av网站| 韩国av一区二区| 精品一区二区综合| 蜜桃视频第一区免费观看| 一区二区三区资源| 国产精品久久久久永久免费观看 | 欧美日韩久久一区二区| 在线免费精品视频| 91丨九色丨国产丨porny| 成人免费三级在线| 国产一区二区电影| 国产91精品免费| 国产在线观看一区二区| 国产成人一区二区精品非洲| 精品一区二区免费视频| 精品一区二区三区免费观看| 精品一区二区影视| 老色鬼精品视频在线观看播放| 日本女人一区二区三区| 日韩高清在线电影| 丝袜美腿亚洲色图| 久久精品国产一区二区三 | 成人免费电影视频| 99re8在线精品视频免费播放| 成人在线视频首页| 97se亚洲国产综合自在线观| 91日韩在线专区| 欧美色视频在线观看| 欧美高清视频一二三区 | 中文字幕日韩一区二区| 国产精品不卡在线| 日韩伦理av电影| 亚洲国产裸拍裸体视频在线观看乱了| 一区二区三区 在线观看视频| 日韩高清中文字幕一区| 久久成人免费日本黄色| 精品一区二区在线视频| 99精品在线观看视频| 欧美三级资源在线| 欧美成人女星排名| 国产视频一区二区三区在线观看| 中文字幕国产精品一区二区| 亚洲欧美激情插 | 久久久久亚洲综合| 亚洲欧洲成人自拍| 紧缚捆绑精品一区二区| 91亚洲精品久久久蜜桃| 欧美三级日韩在线| www国产成人| 亚洲美女屁股眼交| 日韩精品国产欧美| 成人免费毛片app| 欧美日韩在线电影| 欧美精品免费视频| 久久综合999| 亚洲国产精品天堂| 高清日韩电视剧大全免费| 在线免费观看成人短视频| 精品国产乱码久久久久久久久| 成人欧美一区二区三区黑人麻豆 | 久久精品国产亚洲aⅴ| 99久久免费国产| 欧美成人aa大片| 国产精品情趣视频| 精品在线观看免费| 欧美日韩一区成人| 国产精品国产三级国产aⅴ入口 | 欧美成人一区二区三区在线观看| 亚洲区小说区图片区qvod| 国产在线日韩欧美| 91久久精品一区二区三区| 欧美一级精品大片| 亚洲一区二区三区不卡国产欧美|