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

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

?? bmpproc.cpp

?? 在vc 6.0環境下的一個坦克小游戲
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
 *	   # 如果本身類中不存在位圖,函數將返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::CopyTranCenter(CBmpProc& souBmp, 
							  CRect* crArea, 
							  COLORREF crColour, 
							  int mode)
{
	if (!IsValid())
		return FALSE;

	ASSERT(m_pInfo);
	ASSERT(m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	if (!souBmp.IsValid())
		return FALSE;

	ASSERT(souBmp.m_pInfo);
	ASSERT(souBmp.m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	CRect rect(Rect());

	if (crArea)
		rect = *crArea;

	// 矩形坐標規范化
	rect.NormalizeRect();

	if ((rect.Width()==0)||(rect.Height()==0))
		return FALSE;

	// 復制源圖
	CDC			compDC;
	CBitmap		*pOldBmp;

	// 創建與當前顯示設備兼容的內存設備描述表
	compDC.CreateCompatibleDC(NULL);
	pOldBmp	= compDC.SelectObject((CBitmap*)this);

	// 復制指定尺寸的源位圖到目標位圖
	souBmp.DrawTranCenter(compDC, &rect, crColour, mode);

	compDC.SelectObject(pOldBmp);

	return TRUE;
}



/*************************************************************************
 *
 * CopyTranTile()
 *
 * 參數說明:
 * 
 * CBmpProc& souBmp			- 源位圖目標
 * CRect* crArea 			- 平鋪的范圍(缺省值為NULL)
 * COLORREF crColour		- 要濾掉或保留的顏色(缺省值是白色)
 * int mode					- 如果是0則將不拷貝指定的顏色,如果是1則保留指定
 *						      的顏色(缺省值為0)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 將源位圖透明的平鋪到本類的指定矩形中
 * 
 * 如果入口參數crArea設為NULL,則平鋪矩形等于本身類中圖像的尺寸。
 * 該函數不會拉伸或壓縮源位圖圖像。
 * 
 * 注:# 本身類中原來必需已存在位圖,且調用之后的位圖不會被刪除
 *     # 如果源位圖類是空的,則返回FALSE
 *	   # 如果本身類中不存在位圖,函數將返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::CopyTranTile(CBmpProc& souBmp, 
							CRect* crArea, 
							COLORREF crColour, 
							int mode)
{
	// 運行環境檢測
	if (!IsValid())
		return FALSE;

	ASSERT(m_pInfo);
	ASSERT(m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	if (!souBmp.IsValid())
		return FALSE;

	ASSERT(souBmp.m_pInfo);
	ASSERT(souBmp.m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	// 缺省情況下鋪設范圍就是本身位圖的尺寸
	CRect rect(Rect());

	if (crArea)
		rect = *crArea;	// 另外指定尺寸

	// 矩形坐標規范化
	rect.NormalizeRect();

	if ((rect.Width()==0)||(rect.Height()==0))
		return FALSE;

	// 復制源圖
	CDC			compDC;
	CBitmap		*pOldBmp;

	// 創建與當前顯示設備兼容的內存設備描述表
	compDC.CreateCompatibleDC(NULL);
	pOldBmp	= compDC.SelectObject((CBitmap*)this);

	// 復制指定尺寸的源位圖到目標位圖
	souBmp.DrawTranTile(compDC, &rect, crColour, mode);

	compDC.SelectObject(pOldBmp);
	
	return TRUE;
}



/*************************************************************************
 *
 * LoadFromClipboard()
 *
 * 參數說明:無
 * 
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取剪貼板中的DIB位圖到類中
 * 
 * 如果函數成功,則類中原來的位圖(如果有的話)將被刪除
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromClipboard()
{
	// 檢查剪貼板的有效性
	if (!PasteAvailable())
		return FALSE;

	// 打開剪貼板
	if (::OpenClipboard(NULL))
	{
		// 獲取剪貼板中的DIB數據
		HANDLE h = ::GetClipboardData(CF_DIB);

		if (!h)
		{
			CloseClipboard();
			return FALSE;
		}

		LPSTR lpDIB = (LPSTR)CreateMemoryBlockFromHandle(h);
		if (!lpDIB)
		{	// 讀入的剪貼板數據句柄不需要釋放,系統會自動釋放
			CloseClipboard();
			return FALSE;
		}

		CloseClipboard();

		// 檢查DIB信息塊的有效性
		if (*((DWORD*)lpDIB) != sizeof(BITMAPINFOHEADER))
		{
			::free((void*)lpDIB);
			return FALSE;
		}

		// 復制信息塊
		ASSERT(CalculateDIBInfoSize((LPBITMAPINFOHEADER)lpDIB) >= sizeof(BITMAPINFOHEADER));
		LPBITMAPINFO pInfo = (LPBITMAPINFO)CreateMemoryBlockFromAddress(
			(LPVOID)lpDIB, CalculateDIBInfoSize((LPBITMAPINFOHEADER)lpDIB));
		if (!pInfo)
		{
			::free((void*)lpDIB);
			return FALSE;
		}

		// 計算位數據首地址
		LPSTR pBits = (LPSTR)FindDIBBits(lpDIB);
		ASSERT(pBits);

		// 制作DDB位圖
		HBITMAP hBmp;
		HWND hWnd = ::GetDesktopWindow();
		ASSERT(hWnd);
		HDC hDC = ::GetDC(hWnd);

		hBmp = ::CreateDIBitmap(hDC,		// 創建DDB位圖。(將DIB位數據
			(BITMAPINFOHEADER *)pInfo,		// 轉換為DDB位數據)
			CBM_INIT, pBits, 
			(BITMAPINFO *)pInfo, 
			DIB_RGB_COLORS);

		::ReleaseDC(hWnd, hDC);

		// 創建完邏輯位圖后,從剪貼板中讀取的數據已無用,釋放
		::free((void*)lpDIB);

		if (hBmp)	// 成功
		{
			// 刪除原來的圖像,并且設置新的位圖
			if (!ClearAndSetData(IT_CLIP,0,(LPCTSTR)"",pInfo,hBmp))
			{
				::free((void*)pInfo);
				::DeleteObject(hBmp);
				return FALSE;
			}
			return TRUE;
		}
		else	// 失敗
		{
			::free((void*)pInfo);
			return FALSE;
		}
	}

  return FALSE;
}



/*************************************************************************
 *
 * LoadFromFile()
 *
 * 參數說明:
 * 
 * LPCTSTR lpszPathName		- 待讀入的位圖文件名稱(路徑)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取指定位圖文件到類中
 * 
 * 如果函數成功,則類中原來的位圖(如果有的話)將被刪除
 * 如果入口參數指定的文件不存在或不是一個位圖文件,則函數返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromFile(LPCTSTR lpszPathName)
{
	CFile file;
	LPBITMAPINFO lpbi;
	LPSTR pBits;
	HBITMAP hBmp;

	if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite))
		return FALSE;

	// 判斷文件是否是有效的BMP文件
	if (IsValidBmpFile(file) == FALSE)
	{
		file.Close();
		return FALSE;
	}

	// 讀取BMP文件信息
	if ((lpbi=GetBmpFileInfo(file)) == NULL)
	{
		file.Close();
		return FALSE;
	}

	// 本類不支持壓縮位圖,所以如果是壓縮位圖則返回FALSE
	if ((lpbi->bmiHeader.biCompression==BI_RLE4)||(lpbi->bmiHeader.biCompression==BI_RLE8))
	{
		::free((void*)lpbi);
		file.Close();
		return FALSE;
	}

	// 提取BMP位數據
	if ((pBits=GetBmpFileBits(file)) == NULL)
	{
		::free((void*)lpbi);
		file.Close();
		return FALSE;
	}


	HWND hWnd = ::GetDesktopWindow();
	ASSERT(hWnd);
	HDC hDC = ::GetDC(hWnd);

	hBmp = ::CreateDIBitmap(hDC,		// 創建DDB位圖。(將DIB位數據
		(BITMAPINFOHEADER *)lpbi,		// 轉換為DDB位數據)
		CBM_INIT, pBits, 
		(BITMAPINFO *)lpbi, 
		DIB_RGB_COLORS);

	::ReleaseDC(hWnd, hDC);

	// 創建完邏輯位圖后,從文件中讀取的位數據已無用,釋放
	::free((void*)pBits);

	file.Close();

	if (hBmp)	// 成功
	{
		// 刪除原來的圖像,并且設置新的位圖
		if (!ClearAndSetData(IT_DISKFILE,0,lpszPathName,lpbi,hBmp))
		{
			::free((void*)lpbi);
			::DeleteObject(hBmp);
			return FALSE;
		}
		return TRUE;
	}
	else	// 失敗
	{
		::free((void*)lpbi);
		return FALSE;
	}
}



/*************************************************************************
 *
 * LoadFromResourceID()
 *
 * 參數說明:
 * 
 * UINT uID					- 待讀入的位圖資源名稱(標識值)
 * HINSTANCE hInstance		- 位圖資源所在實例的句柄(如果它被設為NULL,則
 *							  函數將該值設為當前應用程序進程)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取指定位圖資源到類中
 * 
 * 如果函數成功,則類中原來的位圖(如果有的話)將被刪除
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromResourceID(UINT uID, HINSTANCE hInst) 
{ 
	return LoadFromResourceName((LPCTSTR)MAKEINTRESOURCE(uID), hInst); 
}



/*************************************************************************
 *
 * LoadFromResourceName()
 *
 * 參數說明:
 * 
 * LPCTSTR lpResourceName	- 待讀入的位圖資源名稱(字符串)
 * HINSTANCE hInstance		- 位圖資源所在實例的句柄(如果它被設為NULL,則
 *							  函數將該值設為當前應用程序進程)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取指定位圖資源到類中
 * 
 * 如果函數成功,則類中原來的位圖(如果有的話)將被刪除
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromResourceName(LPCTSTR lpResourceName, 
									HINSTANCE hInstance)
{
	HINSTANCE	hInst = hInstance;
	HBITMAP hBmp = NULL;

	//如果入口參數hInstance是NULL,則函數將用當前應用程序進程的實例句柄
	if (hInst == NULL)
		hInst = ::AfxGetResourceHandle();

	ASSERT(hInst);

	HRSRC hSrc = ::FindResource(hInst, lpResourceName, RT_BITMAP);
	BOOL bSuccess = FALSE;

	if (!hSrc)
		return bSuccess;

	// 由LoadResource()函數讀入的資源目標不需要顯示的刪除它,Windows
	// 系統會自動刪除。LockResource()鎖定的資源目標也不需要顯示的解鎖
	HGLOBAL hResData = LoadResource(hInst, hSrc);
	if (hResData)
	{
		LPVOID lpResData = LockResource(hResData);
		if (lpResData)
		{
			// 如果是有效的DIB資源,則資源的首位應該是BITMAPINFOHEADER
			// 結構
			ASSERT(*((DWORD*)lpResData) == sizeof(BITMAPINFOHEADER));

			LPSTR pBits = FindDIBBits((LPSTR)lpResData);
			ASSERT(pBits > (LPSTR)lpResData);

			HWND hWnd = ::GetDesktopWindow();
			ASSERT(hWnd);
			HDC hDC = ::GetDC(hWnd);

			hBmp = CreateDIBitmap(hDC,			// 創建DDB位圖。(將DIB位數據
				(BITMAPINFOHEADER *)lpResData,	// 轉換為DDB位數據)
				CBM_INIT, pBits, 
				(BITMAPINFO *)lpResData, 
				DIB_RGB_COLORS);

			::ReleaseDC(hWnd, hDC);

			if (hBmp)	// 成功
			{
				DWORD dwInfoSize = (DWORD)((LPSTR)pBits-(LPSTR)lpResData);
				ASSERT(dwInfoSize > (DWORD)(sizeof(BITMAPFILEHEADER)));

				LPBITMAPINFO lpbi = (LPBITMAPINFO)CreateMemoryBlockFromAddress(
					(LPVOID)NULL, dwInfoSize);
				if (lpbi)
				{
					// 復制位圖信息塊,因為lpResData所指的內存不是運行時態庫
					// 函數分配的內存塊,所以未用CreateMemoryBlockFromAddress()
					// 的復制功能
					::memcpy((void*)lpbi, (const void*)lpResData, dwInfoSize);
				}
				else
				{
					::DeleteObject(hBmp);
					return FALSE;
				}

				if ((((DWORD)lpResourceName)>>16) == 0)
				{// 如果指定資源時使用的是標識,則串指針的高16位是0
					// 刪除原來的圖像,并且設置新的位圖
					if (!ClearAndSetData(IT_RESOURCE,(DWORD)lpResourceName,(LPCTSTR)"",lpbi,hBmp))
					{
						::free((void*)lpbi);
						::DeleteObject(hBmp);
						return FALSE;
					}
				}
				else
				{
					// 刪除原來的圖像,并且設置新的位圖
					if (!ClearAndSetData(IT_RESOURCE,0, lpResourceName,lpbi,hBmp))
					{
						::free((void*)lpbi);
						::DeleteObject(hBmp);
						return FALSE;
					}
				}
				bSuccess = TRUE;
			}
		}
	}

	return bSuccess;
}



/*************************************************************************
 *
 * LoadFromObject()
 *
 * 參數說明:
 * 
 * CBmpProc& souBmp			- 源位圖目標
 * CRect *pSouRect			- 復制矩形
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取源位圖目標中指定區域(矩形)的圖像到類中
 * 
 * 如果入口參數pSouRect設為NULL,則復制源目標的整個位圖
 * 入口參數pSouRect必須是一個正常的矩形坐標數據(即

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成年人网站在线观看| 欧美午夜一区二区三区| 日本不卡的三区四区五区| 乱中年女人伦av一区二区| 97久久精品人人爽人人爽蜜臀| 欧美成人伊人久久综合网| 国产精品一卡二卡| 成人18视频日本| 欧美一级黄色片| 在线观看av一区二区| 国产成人免费xxxxxxxx| 日av在线不卡| 亚洲国产日韩一级| 亚洲精选一二三| 亚洲欧洲精品天堂一级| 欧美α欧美αv大片| 欧美色倩网站大全免费| 色综合色狠狠天天综合色| 国产呦萝稀缺另类资源| 美国十次了思思久久精品导航| 亚洲一区二区三区四区在线| 国产精品乱子久久久久| 欧美亚洲一区三区| 亚洲欧美国产77777| 欧美午夜电影在线播放| 国产精品国产三级国产有无不卡 | 天天色综合天天| 99国产精品国产精品毛片| 欧美经典一区二区三区| 粉嫩av一区二区三区粉嫩| 久久日一线二线三线suv| 高清不卡一区二区在线| 免播放器亚洲一区| 亚洲一二三区不卡| 亚洲综合一二区| 中文字幕免费观看一区| 欧美极品少妇xxxxⅹ高跟鞋| 91高清视频免费看| 在线免费亚洲电影| 91视频免费播放| 三级久久三级久久| 老司机午夜精品| 美女一区二区三区| 99亚偷拍自图区亚洲| 国产精品一区二区久激情瑜伽 | 欧美成人在线直播| 国产成人综合网站| 久久久久亚洲蜜桃| 成人美女视频在线看| 久久狠狠亚洲综合| 麻豆成人免费电影| 日韩国产高清在线| 国产一区二区伦理片| 91无套直看片红桃| av高清久久久| 亚洲成国产人片在线观看| 国产精品女人毛片| 国产精品丝袜在线| 久久网站最新地址| 欧美电影免费观看高清完整版| 成人免费av在线| 伊人色综合久久天天人手人婷| 亚洲人成小说网站色在线| 国产精品日韩成人| 欧美mv日韩mv国产| 日本电影亚洲天堂一区| 蜜桃视频一区二区三区在线观看| 国产免费成人在线视频| 色综合天天性综合| 成熟亚洲日本毛茸茸凸凹| 成人精品小蝌蚪| 丝袜美腿亚洲色图| 日日摸夜夜添夜夜添亚洲女人| 成人av免费观看| 色综合av在线| 在线播放欧美女士性生活| 色噜噜夜夜夜综合网| 91精品国产综合久久久久| 成人精品电影在线观看| 97se亚洲国产综合在线| 欧美亚洲综合在线| 国产98色在线|日韩| 欧美精品免费视频| 精品少妇一区二区三区日产乱码 | 日韩一区二区三区四区| 色诱视频网站一区| 色拍拍在线精品视频8848| 色又黄又爽网站www久久| 欧美一级二级三级蜜桃| 99久久国产综合精品色伊| 亚洲日本欧美天堂| 色狠狠综合天天综合综合| 日韩欧美专区在线| 日本一区二区视频在线观看| **性色生活片久久毛片| 成人aa视频在线观看| 亚洲国产成人高清精品| www.亚洲精品| 国产嫩草影院久久久久| 日韩精品一区二区三区视频在线观看| 日韩一级视频免费观看在线| 99久久夜色精品国产网站| 波多野结衣亚洲| 亚洲精品一区二区三区影院| 亚洲激情第一区| 国内不卡的二区三区中文字幕| 91精品久久久久久久99蜜桃| 久久久久亚洲综合| 男人的天堂久久精品| 99在线精品免费| 综合久久久久久| 91久久精品一区二区二区| 日韩欧美亚洲国产精品字幕久久久| 欧美激情一区二区三区蜜桃视频| 国产精品羞羞答答xxdd| 欧美中文字幕久久| 91精品国产91久久久久久最新毛片 | 国产麻豆日韩欧美久久| 成人激情校园春色| 久久综合久久鬼色中文字| 亚洲国产另类精品专区| 亚洲妇女屁股眼交7| 高清shemale亚洲人妖| 色94色欧美sute亚洲线路一久| 精品盗摄一区二区三区| 一区二区在线观看免费视频播放| 久久精品国产精品青草| 成人短视频下载| 欧美一卡二卡三卡| 国内外精品视频| 国产丝袜欧美中文另类| 色婷婷综合在线| 亚洲色图在线视频| 欧美亚洲国产怡红院影院| 亚洲国产精品麻豆| 一本色道久久综合亚洲aⅴ蜜桃 | 成人精品视频一区二区三区| 在线成人午夜影院| 中文字幕一区三区| 91一区在线观看| 国产精品欧美久久久久一区二区| 国产mv日韩mv欧美| 久久免费视频一区| 国产精品一级二级三级| 久久色中文字幕| 青草国产精品久久久久久| 精品少妇一区二区三区在线播放| 天堂成人免费av电影一区| 91精品国产综合久久香蕉的特点 | 在线视频国内自拍亚洲视频| 一区二区三区不卡视频在线观看| 99天天综合性| 国产精品久久久久9999吃药| 国产成人精品一区二| 久久久久国产精品人| 99久久国产综合精品色伊| 中文字幕在线观看一区| 91福利视频久久久久| 亚洲自拍偷拍综合| 色哟哟一区二区在线观看| 亚洲精品国产视频| 在线精品亚洲一区二区不卡| 日韩av在线发布| 日韩一区二区三区免费观看| 国产成人av电影在线播放| 日本一区二区免费在线观看视频| 韩国v欧美v日本v亚洲v| 中文字幕巨乱亚洲| 92国产精品观看| 日本三级韩国三级欧美三级| 日韩欧美国产精品一区| 成人av电影在线播放| 亚洲柠檬福利资源导航| 日韩一级在线观看| 日韩精品一级二级| 精品少妇一区二区三区在线视频 | 亚洲美女屁股眼交| 欧美亚男人的天堂| 天天影视色香欲综合网老头| 久久久久久久久久久电影| av电影在线观看完整版一区二区| 亚洲综合一区二区精品导航| 欧美色图片你懂的| 欧美aaaaaa午夜精品| 亚洲成av人片一区二区梦乃| 久久久久国产精品免费免费搜索 | 国产欧美日本一区视频| 日韩欧美国产综合一区| 欧美一区二区三区四区久久| 欧美日韩精品一二三区| 欧美在线看片a免费观看| 欧美性大战久久久久久久蜜臀| 欧美在线999| 日韩欧美国产综合| 久久免费电影网| 亚洲天堂免费看| 青青草精品视频| 国产盗摄视频一区二区三区| 东方aⅴ免费观看久久av| 91在线视频免费91|