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

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

?? canvas.cpp

?? smartphone 監(jiān)聽電源狀態(tài)源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "StdAfx.h"
#include "Canvas.h"
#include "resourcesp.h"

CCanvas::CCanvas(void)
{
	m_pAnimation=NULL;
	m_CurrentLoop=0;
	m_CurrentImage=0;
	m_bAnimationPlaying=false;
	m_vecSM.clear();
	InitializeCriticalSection(&m_CriticalSection);
	m_arrVisibleBmp.clear();
	memset( m_arrItemRect,0,CANVAS_LINE*CANVAS_ROW*sizeof(RECT));
	m_hDefaultBitmap = NULL;

}

CCanvas::~CCanvas(void)
{
	std::vector<CShortcutManager*>::iterator it;
	for(it = m_vecSM.begin();it!=m_vecSM.end();it++)
	{
		delete (*it);
		*it = NULL;
	}
	m_vecSM.clear();
	std::vector<HBITMAP>::iterator itt;
	for(itt = m_arrVisibleBmp.begin();itt!=m_arrVisibleBmp.end();itt++)
	{
		DeleteObject(*itt);
		*itt = NULL;
	}
	m_arrVisibleBmp.clear();
	Stop();

}
BEGIN_MESSAGE_MAP(CCanvas, CStatic)
	ON_WM_PAINT()
END_MESSAGE_MAP()

void CCanvas::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: Add your message handler code here
	m_pMemDC = &dc;
	CDC memDC;
	CBitmap bmpCanvas;
	CBitmap*pOldBitmap;
//	bmpCanvas.CreateCompatibleBitmap(&dc,m_rcCanvas.Width(),m_rcCanvas.Height());
	//畫背景圖
	memDC.CreateCompatibleDC(&dc);
	HBITMAP hBmpBk = (HBITMAP)SHLoadDIBitmap(m_sBkBmpPath);
	bmpCanvas.Attach(hBmpBk);
	pOldBitmap = memDC.SelectObject(&bmpCanvas);

	DrawShortcutItem(memDC);

	dc.BitBlt(m_rcCanvas.left,m_rcCanvas.top,m_rcCanvas.Width(),m_rcCanvas.Height(),&memDC,0,0,SRCCOPY);
	memDC.SelectObject(pOldBitmap);
	memDC.DeleteDC();
	bmpCanvas.Detach();
	DeleteObject(hBmpBk);
	CString ss = m_smCurrent->GetSelected()->GetTitle();
	if(ss.GetLength()>0)
		AfxGetMainWnd()->SetWindowText(ss);

//	dc.DrawText(_T("good morning!"),20,&rc,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	// Do not call CStatic::OnPaint() for painting messages
}

void CCanvas::DrawShortcutItem(CDC &dc)
{

	CShortcutItem *pItem = NULL;
	for(int i =0;i<CANVAS_LINE;i++)
	{
		for(int j = 0;j<CANVAS_ROW;j++)
		{
			pItem = m_smCurrent->GetFromVisibleAt(i*CANVAS_ROW+j);
			if(pItem)
			{
				HBITMAP hBmp = NULL;
				BITMAP bm;
				if(i*CANVAS_ROW+j == m_smCurrent->GetSelectedNumber()-1)
				{
					EnterCriticalSection(&m_CriticalSection);
					C_Image* & current = m_pAnimation->img[m_CurrentImage];
					LeaveCriticalSection(&m_CriticalSection);
					CDC SrcDC;
					SrcDC.CreateCompatibleDC(&dc);
					void *ppvbits;
					hBmp=CreateDIBSection(dc.GetSafeHdc(),current->pbmi,DIB_RGB_COLORS,(void**)&ppvbits,NULL,NULL);
					if(hBmp!=NULL)
					{
						HBITMAP hOld = (HBITMAP)SrcDC.SelectObject(hBmp);
						//						::GetObject(hBmp,sizeof(BITMAP),&bm);
						int iItemW = m_arrItemRect[i][j].right - m_arrItemRect[i][j].left;
						int iItemH = m_arrItemRect[i][j].bottom - m_arrItemRect[i][j].top;
						//						int iLeft = m_arrItemRect[i][j].left+(iItemW - current->Width)/2;
						//						int iTop = m_arrItemRect[i][j].top+(iItemH - current->Height)/2;
						//						int iWidth = current->Width<iItemW?current->Width:iItemW;
						//						int iHeight = current->Height<iItemH?current->Height:iItemH;
						SetDIBitsToDevice (SrcDC.GetSafeHdc(),0,0,
							current->Width,current->Height,0,0,0,current->Height,
							(LPVOID)current->Raster,current->pbmi,0);
						//定義源、掩碼、透明繪制環(huán)境
						CDC MaskDC,TransDC;
						//定義掩碼、透明位圖
						HBITMAP hMaskBmp,hTransBmp;
						//						BITMAP bm;

						//創(chuàng)建源、掩碼、透明繪制環(huán)境
						MaskDC.CreateCompatibleDC(&dc);
						TransDC.CreateCompatibleDC(&dc);

						//創(chuàng)建透明位圖
						hTransBmp = CreateCompatibleBitmap(dc.GetSafeHdc(),current->Width,current->Height);
						//創(chuàng)建掩碼位圖
						hMaskBmp=CreateBitmap(current->Width,current->Height,1,1,NULL);

						//將透明位圖對象選入到透明繪圖環(huán)境
						HBITMAP hOldTransBmp = (HBITMAP)TransDC.SelectObject(hTransBmp);
						//將目標位圖繪制到透明位圖中
						TransDC.BitBlt(0,0,current->Width,current->Height,&dc,
							m_arrItemRect[i][j].left+current->xPos,
							m_arrItemRect[i][j].top+current->yPos,SRCCOPY);

						//設置背景為透明模式
						SrcDC.SetBkMode(TRANSPARENT);
						//設置背景色
						if (current->Transparent)
							SrcDC.SetBkColor(current->Transparent);
						else
						{
							COLORREF col = SrcDC.GetPixel(0,current->Height-1);
							SrcDC.SetBkColor(col);
						}

						HBITMAP hOldMaskBmp = (HBITMAP)MaskDC.SelectObject(hMaskBmp);

						//將源繪圖環(huán)境繪制到掩碼繪圖環(huán)境中
						MaskDC.BitBlt(0,0,current->Width,current->Height,&SrcDC,0,0,SRCCOPY);

						//將源位圖和透明位圖進行異或操作融合
						TransDC.BitBlt(0,0,current->Width,current->Height,&SrcDC,0,0,SRCINVERT);
						//將透明位圖和掩碼位圖進行與操作
						TransDC.BitBlt(0,0,current->Width,current->Height,&MaskDC,0,0,SRCAND);
						//再將源位圖和透明位圖進行異或操作
						TransDC.BitBlt(0,0,current->Width,current->Height,&SrcDC,0,0,SRCINVERT);

						//此時將透明位圖繪制到目標設備上
						dc.BitBlt(m_arrItemRect[i][j].left+current->xPos,
							m_arrItemRect[i][j].top+current->yPos,
							current->Width,current->Height,&TransDC,
							0,
							0,SRCCOPY);

						//繪制繪圖對象,并釋放相應繪圖環(huán)境和位圖對象
						SrcDC.SelectObject(hOld);
						SrcDC.DeleteDC();
						DeleteObject(hBmp);

						TransDC.SelectObject(hOldTransBmp);
						DeleteObject(hTransBmp);
						TransDC.DeleteDC();

						MaskDC.SelectObject(hOldMaskBmp);
						MaskDC.DeleteDC();
						DeleteObject(hMaskBmp);
					}

				}
				else
				{
					hBmp = m_arrVisibleBmp[i*CANVAS_ROW+j];
					CBitmap bmp;
					bmp.Attach(hBmp);
					bmp.GetBitmap(&bm);
					bmp.Detach();
					int iItemW = m_arrItemRect[i][j].right - m_arrItemRect[i][j].left;
					int iItemH = m_arrItemRect[i][j].bottom - m_arrItemRect[i][j].top;
					int iLeft = m_arrItemRect[i][j].left+(iItemW - bm.bmWidth)/2;
					int iTop = m_arrItemRect[i][j].top+(iItemH - bm.bmHeight)/2;
					int iWidth = bm.bmWidth<iItemW?bm.bmWidth:iItemW;
					int iHeight = bm.bmHeight<iItemH?bm.bmHeight:iItemH;
					TransparentImage(dc.m_hDC,iLeft,iTop,iWidth,iHeight,hBmp,0,0,bm.bmWidth,bm.bmHeight,0xD4D0C8);/*0xBGR*/
				}
			}
			else
				break;
		}
	}
}
//畫透明圖片
void CCanvas::DrawTransParent(HBITMAP hBmp,int const x,int const y,int const cx,int const cy,
	int const srcx,int const srcy,CDC *pDC,COLORREF TransparentColor)
{
	//定義源、掩碼、透明繪制環(huán)境
	CDC SrcDC,MaskDC,TransDC;
	//定義掩碼、透明位圖
	HBITMAP hMaskBmp,hTransBmp;
	BITMAP bm;

	//創(chuàng)建源、掩碼、透明繪制環(huán)境
	SrcDC.CreateCompatibleDC(pDC);
	MaskDC.CreateCompatibleDC(pDC);
	TransDC.CreateCompatibleDC(pDC);

	//得到位圖結構
	CBitmap bmp;
	bmp.Attach(hBmp);
	bmp.GetBitmap(&bm);
	bmp.Detach();
	//創(chuàng)建透明位圖
	hTransBmp = CreateCompatibleBitmap(pDC->m_hDC,cx,cy);
	//創(chuàng)建掩碼位圖
	hMaskBmp=CreateBitmap(cx,cy,1,1,NULL);

	//將透明位圖對象選入到透明繪圖環(huán)境
	HBITMAP hOldTransBmp = (HBITMAP)TransDC.SelectObject(hTransBmp);
	//將目標位圖繪制到透明位圖中
	TransDC.BitBlt(0,0,cx,cy,pDC,srcx,srcy,SRCCOPY);

	//將實際位圖對象選入源繪圖環(huán)境
	HBITMAP hSrcBmp = (HBITMAP)SrcDC.SelectObject(hBmp);

	//設置背景為透明模式
	SrcDC.SetBkMode(TRANSPARENT);
	//設置背景色
	if (TransparentColor)
		SrcDC.SetBkColor(TransparentColor);
	else
	{
		COLORREF col = SrcDC.GetPixel(0,bm.bmHeight-1);
		SrcDC.SetBkColor(col);
	}

	HBITMAP hOldMaskBmp = (HBITMAP)MaskDC.SelectObject(hMaskBmp);

	//將源繪圖環(huán)境繪制到掩碼繪圖環(huán)境中
	MaskDC.BitBlt(0,0,cx,cy,&SrcDC,0,0,SRCCOPY);

	//將源位圖和透明位圖進行異或操作融合
	TransDC.BitBlt(0,0,cx,cy,&SrcDC,0,0,SRCINVERT);
	//將透明位圖和掩碼位圖進行與操作
	TransDC.BitBlt(0,0,cx,cy,&MaskDC,0,0,SRCAND);
	//再將源位圖和透明位圖進行異或操作
	TransDC.BitBlt(0,0,cx,cy,&SrcDC,0,0,SRCINVERT);

	//此時將透明位圖繪制到目標設備上
	BOOL bRet = pDC->BitBlt(x,y,cx,cy,&TransDC,0,0,SRCCOPY);

	//繪制繪圖對象,并釋放相應繪圖環(huán)境和位圖對象
	SrcDC.SelectObject(hSrcBmp);
	SrcDC.DeleteDC();

	TransDC.SelectObject(hOldTransBmp);
	DeleteObject(hTransBmp);
	TransDC.DeleteDC();

	MaskDC.SelectObject(hOldMaskBmp);
	MaskDC.DeleteDC();
	DeleteObject(hMaskBmp);
}

int CCanvas::LoadAnimatedGif(LPTSTR FileName)
{
	Stop();
	EnterCriticalSection(&m_CriticalSection);
	m_AnimGif.Reset();
	m_pAnimation = NULL;
#ifdef _UNICODE
	char szTemp[MAX_PATH] = {0};
	WideCharToMultiByte(CP_ACP,0,FileName,_tcslen(FileName),szTemp,_tcslen(FileName),NULL,false);
	int Result=m_AnimGif.LoadGIF(szTemp);
#else
	int Result=m_AnimGif.LoadGIF(FileName);
#endif
	m_pAnimation=&m_AnimGif;
	LeaveCriticalSection(&m_CriticalSection);
	Play();

	return Result;
}
// fnThread: Thread function in charge of looping animation frames.
DWORD WINAPI CCanvas::fnThread (LPVOID lpParameter)
{
	do
	{
		Sleep(10);
		CCanvas* window;
		C_ImageSet* anim;
		window=(CCanvas*) lpParameter;
		if(window->m_pAnimation==NULL)
		{
			continue;
		}
		anim=window->m_pAnimation;
		window->m_bAnimationPlaying=TRUE;
		while (	anim->nLoops ? window->m_CurrentLoop < anim->nLoops : true )
		{
			while (1)
			{
				//window->DrawGif();
				::InvalidateRect(window->m_hWnd,NULL,FALSE);
				window->EnterCriticalSec();
				C_Image* & image = anim->img[window->m_CurrentImage];
				int iDelay = image->Delay?image->Delay:100;
				window->LeaveCriticalSec();

				if (window->m_CurrentImage < anim->nImages-1)
					++window->m_CurrentImage;
				else
				{
					window->Rewind();
//					window->m_CurrentImage=0; 
//					break;
				}
				Sleep (iDelay);
				// CurrentImage must always be valid!

			} 
			++window->m_CurrentLoop;
		}
		window->Rewind();
		window->m_bAnimationPlaying=FALSE;
	}while(1);
	return 0;
}

// Play: Start/Resume animation loop
void CCanvas::Play ()
{
	if (!m_bAnimationPlaying)
		if (m_pAnimation->nImages > 1)
			m_hThreadAnim = CreateThread(NULL,0,fnThread,this,0,&m_dwThreadIdAnim);
}

// Stop: Stop animation loop
void CCanvas::Stop ()
{
	if (m_bAnimationPlaying)
	{
		TerminateThread(m_hThreadAnim,0);
		Rewind();
		m_bAnimationPlaying=FALSE;
	}
}

// Rewind: Reset animation loop to its initial values
void CCanvas::Rewind ()
{
	m_CurrentLoop=0;
	m_CurrentImage=0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区91| 丁香婷婷综合网| 国产成人免费视频一区| 91免费精品国自产拍在线不卡| 欧美日韩一区精品| 中文字幕不卡在线观看| 日本在线不卡一区| 91丨九色丨黑人外教| 精品电影一区二区三区| 亚洲高清免费在线| 一本一道久久a久久精品| 久久久亚洲午夜电影| 日韩经典中文字幕一区| 一本色道久久综合狠狠躁的推荐| 欧美不卡视频一区| 日韩主播视频在线| 在线一区二区视频| 一区二区中文视频| 成人激情午夜影院| 久久精品一区二区三区不卡牛牛| 蜜桃久久久久久久| 国产中文字幕精品| 欧美va亚洲va| 免费成人小视频| 91麻豆精品国产91久久久久久| 亚洲综合网站在线观看| 91看片淫黄大片一级在线观看| 久久久久综合网| 国产丶欧美丶日本不卡视频| 精品欧美一区二区久久| 美脚の诱脚舐め脚责91 | 亚洲精品日韩综合观看成人91| 国产盗摄一区二区| 国产精品嫩草久久久久| 成人午夜激情影院| 国产精品卡一卡二卡三| av一区二区不卡| 亚洲精品日产精品乱码不卡| 91国在线观看| 偷窥国产亚洲免费视频| 欧美日本一道本| 天堂蜜桃一区二区三区 | 午夜精品福利一区二区三区av| 色哟哟在线观看一区二区三区| 一卡二卡欧美日韩| 7777精品伊人久久久大香线蕉超级流畅| 亚洲成av人片| 精品黑人一区二区三区久久| 粉嫩13p一区二区三区| 国产精品久久久久久久久搜平片| av在线免费不卡| 亚洲电影中文字幕在线观看| 91麻豆精品国产91久久久久| 蜜桃视频在线一区| 亚洲国产精品v| 欧美日韩中文字幕精品| 欧美aa在线视频| 国产精品美女久久久久久久久久久| 99国产精品久久| 日本不卡一二三| 国产欧美一区二区精品性色超碰| 99久久婷婷国产| 日本v片在线高清不卡在线观看| 欧美大片拔萝卜| 波多野结衣亚洲| 亚洲成av人片在www色猫咪| 亚洲精品一线二线三线无人区| 91小视频在线观看| 另类的小说在线视频另类成人小视频在线 | 欧美日韩精品一区二区天天拍小说 | 精品一区二区三区视频在线观看 | 中文字幕中文乱码欧美一区二区| 色视频欧美一区二区三区| 美女视频网站黄色亚洲| 国产精品色呦呦| 日韩亚洲欧美综合| 99在线热播精品免费| 免费人成黄页网站在线一区二区| 国产亚洲一区二区三区| 欧美日韩综合在线免费观看| 国产98色在线|日韩| 视频一区视频二区中文字幕| 国产精品天天摸av网| 欧美一级淫片007| 欧美自拍丝袜亚洲| 成人av在线一区二区三区| 日韩av高清在线观看| 亚洲永久精品国产| 国产精品美女久久久久aⅴ国产馆| 欧美精品色综合| 欧美午夜片在线观看| 成人免费看视频| 国产一区二区三区不卡在线观看 | 精品视频全国免费看| 国产v综合v亚洲欧| 精品一区二区免费看| 亚洲大片在线观看| 一区二区三区免费网站| 亚洲国产高清在线观看视频| 日韩免费电影一区| 欧美疯狂做受xxxx富婆| 91精品福利视频| 91丨国产丨九色丨pron| 99久久国产综合精品色伊| 粉嫩绯色av一区二区在线观看| 精品一二线国产| 捆绑调教美女网站视频一区| 亚洲图片自拍偷拍| 亚洲一区在线免费观看| 一区二区三区.www| 亚洲自拍偷拍图区| 亚洲乱码精品一二三四区日韩在线| 舔着乳尖日韩一区| 亚洲午夜在线电影| 一区二区三区欧美日| 亚洲欧美一区二区久久| 成人免费一区二区三区在线观看| 日本一二三不卡| 中文字幕在线视频一区| 中文字幕在线不卡视频| 亚洲素人一区二区| 一区二区在线观看免费| 一区二区三区四区蜜桃| 亚洲愉拍自拍另类高清精品| 一区二区三区美女| 五月激情丁香一区二区三区| 香蕉成人啪国产精品视频综合网| 午夜精品久久久久久久久久| 丝袜亚洲另类丝袜在线| 香蕉乱码成人久久天堂爱免费| 婷婷夜色潮精品综合在线| 日韩一区精品视频| 国产麻豆精品一区二区| 成人白浆超碰人人人人| 91老师片黄在线观看| 欧美三级乱人伦电影| 欧美一级xxx| 国产欧美一区二区三区沐欲 | 成人avav影音| 欧美性淫爽ww久久久久无| 欧美日韩国产a| 亚洲高清中文字幕| 麻豆精品国产传媒mv男同| 国产精品一区专区| 日本韩国精品一区二区在线观看| 欧美蜜桃一区二区三区| 久久九九影视网| 亚洲高清视频在线| 国产福利一区二区三区| 欧美系列日韩一区| 国产亚洲一二三区| 亚洲国产乱码最新视频| 国内成人自拍视频| 欧美视频三区在线播放| 久久这里只有精品首页| 亚洲视频你懂的| 毛片基地黄久久久久久天堂| 岛国av在线一区| 欧美少妇bbb| 国产欧美日韩综合精品一区二区| 亚洲午夜激情av| 国v精品久久久网| 欧美另类videos死尸| 中文字幕av免费专区久久| 亚洲成人中文在线| aaa欧美大片| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 成人免费看的视频| 日韩免费看的电影| 亚洲一区二区五区| 国产成人在线观看| 欧美一区二区成人| 亚洲一区在线视频| gogo大胆日本视频一区| www久久精品| 人人狠狠综合久久亚洲| 99精品一区二区三区| 26uuu另类欧美| 日韩成人午夜精品| 色婷婷综合久色| 国产精品免费久久| 国产成人久久精品77777最新版本| 欧美日韩一二三| 一区二区国产盗摄色噜噜| 国产成人鲁色资源国产91色综| 日韩你懂的在线观看| 亚洲大片精品永久免费| 色婷婷狠狠综合| 韩国毛片一区二区三区| 欧美一级欧美三级| 亚洲国产一区视频| 91黄色小视频| 亚洲一区二区中文在线| 99re热视频精品| 国产香蕉久久精品综合网| 激情欧美一区二区三区在线观看| 日韩女优毛片在线| 精品写真视频在线观看| 日韩欧美亚洲国产另类| 免费看欧美女人艹b|