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

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

?? membm.cpp

?? Led 發(fā)送晨曦
?? CPP
字號:
#include "stdafx.h"
#include "membm.h"
#include "crtdbg.h"	//include for debug macros from CRT

#if _WIN32_WINDOWS >= 0x0410	//msimg32 library is provided only for winver > 95
#pragma comment( lib, "msimg32" )
#endif

/////////////////////////// CMemBm implementation //////////////////////////////////////
// create memory bitmap from source bitmap
bool CMemBm::
	Create(HDC hDC, HBITMAP hbmSrc, int iLeft, int iTop,
		int iWidth, int iHeight, DWORD dwRop )
{
	//if already created - do nothing
	if( !m_bCreated )
	{
		//we cannot use NULL hDC and NULL hbmSrc at the same time-
		//result will be nonsense (copy empty MemDC contents to our bitmap)
		//use appropriate DC as source DC
		HDC hdcSrc, hdcTmpSrc = NULL;
		if( hDC )
			hdcSrc = hDC;
		else
		{
			//use this only if input hDC is NULL - get screen DC
			hdcTmpSrc = GetDC( NULL );
			_ASSERT(hdcTmpSrc);
			hdcSrc = hdcTmpSrc;
		}

		m_hdcImg = CreateCompatibleDC( hdcSrc );
		_ASSERT(m_hdcImg);

		_ASSERT(hdcSrc);

		if( m_hdcImg )
		{
			m_hbmImg = CreateCompatibleBitmap( hdcSrc, iWidth, iHeight );
			_ASSERT( m_hbmImg );

			if(m_hbmImg)
			{
				//select our memory bitmap
				m_hbmOld = SelectObject( m_hdcImg, m_hbmImg );

				//select source bitmap if it's not NULL
				HANDLE hbmOldSrc = NULL;
				//check if we actually need selection of src image in src DC
				//(it may be already selected in it in case of copying contents of
				//another CMemBm object )
				bool bNeedSrcSelect = 
					hbmSrc && (GetCurrentObject( hdcSrc, OBJ_BITMAP) != hbmSrc );
				if( bNeedSrcSelect )
					hbmOldSrc = SelectObject( hdcSrc, hbmSrc );

				//copy bitmap bits
				BitBlt( m_hdcImg, 0, 0, iWidth, iHeight,
					hdcSrc, iLeft, iTop, dwRop );

				//setup sizes of our image
				m_iWidth = iWidth;
				m_iHeight = iHeight;
				//setup color information
				BITMAP bmInfo;
				memset( &bmInfo, 0, sizeof BITMAP );
				GetObject( m_hbmImg, sizeof BITMAP, &bmInfo );
				m_iPlanes = bmInfo.bmPlanes;
				m_iBpp = bmInfo.bmBitsPixel;

				//set "created" flag
				m_bCreated = true;

				//deselect source bitmap
				if( bNeedSrcSelect )
					SelectObject( hdcSrc, hbmOldSrc );
			}

			//if temporary dc was accessed - release it
			if( hdcTmpSrc )
				ReleaseDC( NULL, hdcTmpSrc );
		}
	}

	return m_bCreated;
};

bool CMemBm::
	Create( HDC hDC, int iWidth, int iHeight,
		UINT cPlanes, UINT cBitsPerPel, const void *lpvBits )
{
	//if already created - do nothing
	if( !m_bCreated )
	{

		m_hdcImg = CreateCompatibleDC( hDC );
		_ASSERT(m_hdcImg);
		if( m_hdcImg )
		{
			m_hbmImg = CreateBitmap( iWidth, iHeight, cPlanes, cBitsPerPel, lpvBits );
			_ASSERT( m_hbmImg );

			if(m_hbmImg)
			{
				//select our memory bitmap
				m_hbmOld = SelectObject( m_hdcImg, m_hbmImg );

				//setup sizes of our image
				m_iWidth = iWidth;
				m_iHeight = iHeight;
				m_iPlanes = cPlanes;
				m_iBpp = cBitsPerPel;

				//set "created" flag
				m_bCreated = true;
			}
		}
	}

	return m_bCreated;
};

bool CMemBm::
	Create( const CMemBm& bmSrc, DWORD dwRop )
{
	return Create( bmSrc, bmSrc.m_hbmImg, 0, 0, bmSrc.GetWidth(), bmSrc.GetHeight(), dwRop );
};

bool CMemBm::
	Create( HINSTANCE hInst, LPCTSTR pszName )
{
	if( !m_bCreated )
	{
		HBITMAP hbmImg = (HBITMAP)LoadImage(hInst, pszName,
			IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE );
		_ASSERT( hbmImg );
		if( hbmImg )
		{
			BITMAP bmInfo;
			//prepare structure for bitmap parameters query
			memset( &bmInfo, 0, sizeof BITMAP );

			m_hbmImg = hbmImg;

			m_hdcImg = CreateCompatibleDC( NULL );
			_ASSERT( m_hdcImg );
			if( m_hdcImg && GetObject( m_hbmImg, sizeof BITMAP, &bmInfo ) )
			{
				m_hbmOld = SelectObject( m_hdcImg, m_hbmImg );
				
				m_iWidth = bmInfo.bmWidth;
				m_iHeight = bmInfo.bmHeight;
				m_iPlanes = bmInfo.bmPlanes;
				m_iBpp = bmInfo.bmBitsPixel;

				m_bCreated = true;
			}
		}
	}

	return m_bCreated;
}

//cleanup object data
void CMemBm::
	Cleanup()
{
	if( m_hdcImg )
	{
		SelectObject( m_hdcImg, m_hbmOld );
		DeleteDC(m_hdcImg);
	}

	//this "if" is not necessary,
	//as we can call DeleteObject on non valid handles, but just in case
	if( m_hbmImg )
	{
		DeleteObject(m_hbmImg);
	}

	//reset data members to 0
	Initialize();
};

//perform pattern fill, adjusting brush origin if neccessary
void CMemBm::
	Fill( HDC hDC, int iLeft, int iTop, int iWidth, int iHeight,
		bool bAdjustBrushOrg, DWORD dwRop )
{
	//if image is absent - do nothing
	if( !m_bCreated )
		return;

	//create brush from image
	HBRUSH hbrPat = CreatePatternBrush( m_hbmImg );
	_ASSERT( hbrPat );
	
	//do brush origin adjustment as neccessary
	POINT pntOldOrg;
	if( bAdjustBrushOrg )
	{
#if _WIN32_WINDOWS >= 0x0410	//automatic brush tracking not supported in Win9x
		UnrealizeObject( hbrPat );
#endif
		SetBrushOrgEx( hDC, iLeft, iTop, &pntOldOrg );
	}
	
	//select our brush to hDC
	HANDLE hbrOldPat = SelectObject( hDC, hbrPat );
	//do patterned fill
	PatBlt( hDC, iLeft, iTop, iWidth, iHeight, dwRop );
	//deselect brush
	SelectObject( hDC, hbrOldPat );

	//reset brush origin
	if( bAdjustBrushOrg )
	{
#if _WIN32_WINDOWS >= 0x0410	//automatic brush tracking not supported in Win9x
		UnrealizeObject( hbrPat );
#endif
		SetBrushOrgEx( hDC, pntOldOrg.x, pntOldOrg.y, NULL );
	}

	//delete brush
    DeleteObject( hbrPat );
};

//do 1-to-1 draw
void CMemBm::
	Draw( HDC hDC, int iLeft, int iTop, DWORD dwRop )
{
	//if not created - do nothing
	if( !m_bCreated )
		return;

	BitBlt( hDC, iLeft, iTop, m_iWidth, m_iHeight, m_hdcImg, 0, 0, dwRop );
};

//perform draw (simple or stretched)
void CMemBm::
	Draw( HDC hDC, int iLeft, int iTop, int iWidth, int iHeight,
		DWORD dwRop, int iStretchMode )
{
	//if not created - do nothing
	if( !m_bCreated )
		return;

	//check if we need stretching
	if( RequireStretch(iWidth, iHeight) )
	{
		//set new stretch mode
		int iOldStretchBltMode = SetStretchBltMode( hDC, iStretchMode );
		
		//do stretch blt
		StretchBlt( hDC, iLeft, iTop, iWidth, iHeight,
			m_hdcImg, 0, 0, m_iWidth, m_iHeight, dwRop );

		//restore old stretch mode
		SetStretchBltMode( hDC, iOldStretchBltMode );
	}
	else
	{
		//do 1-to-1 drawing
		Draw( hDC, iLeft, iTop, dwRop ); 
	}
};

//get bitmap width
int CMemBm::
	GetWidth(void) const
{
	return m_iWidth;
}

//get bitmap height
int CMemBm::
	GetHeight(void) const
{
	return m_iHeight;
}

//get bitmap's bpp
int CMemBm::GetBpp(void)
{
	return m_iBpp;
}

//get bitmap's color planes
int CMemBm::GetPlanes(void)
{
	return m_iPlanes;
}

//draws bitmap transparently (stretching it when necessary)
void CMemBm::
	DrawTrans( HDC hDC, int iLeft, int iTop, int iWidth, int iHeight,
				COLORREF crTransparent )
{
	//if our object is uninitialized - do nothing
	if( !m_bCreated )
		return;

#if _WIN32_WINDOWS >= 0x0410	//msimg library is provided only for winver > 95
	//call WinAPI realization of stretching - capable transparent drawing
	TransparentBlt( hDC, iLeft, iTop, iWidth, iHeight,
		m_hdcImg, 0, 0, m_iWidth, m_iHeight, crTransparent );
#else
	//non-API realization of stretching - capable transparent drawing
	CMemBm bmAnd;
	CMemBm bmXor;	
	CMemBm bmTemp;	//"collation" bitmap for flicker-free drawing

	COLORREF crOldBkColor = SetBkColor( m_hdcImg, crTransparent );
	if( bmAnd.Create( hDC, m_iWidth, m_iHeight, 1, 1, NULL ) &&
		bmXor.Create( *this ) )
	{
		// create AND mask 
		Draw( bmAnd, 0, 0 ); 
		// create XOR mask
		bmAnd.Draw( bmXor, 0, 0, 0x220326 ); 

		bmTemp.Create( hDC, NULL, iLeft, iTop, iWidth, iHeight ); //copy hDC contents to temporary
		
		// blend the AND and XOR masks into the temporary bitmap
		bmAnd.Draw( bmTemp, 0, 0, iWidth, iHeight, SRCAND ); 
		bmXor.Draw( bmTemp, 0, 0, iWidth, iHeight, SRCINVERT); 
		
		// draw the resulting image to the hDC
		bmTemp.Draw( hDC, iLeft, iTop, iWidth, iHeight );
	}
	SetBkColor( m_hdcImg, crOldBkColor );

#endif
}

void CMemBm::
	DrawAlpha( HDC hDC, int iLeft, int iTop, int iWidth, int iHeight, const BLENDFUNCTION& blendFunc )
{
#if _WIN32_WINDOWS >= 0x0410	//msimg library is provided only for winver > 95
	AlphaBlend( hDC, iLeft, iTop, iWidth, iHeight, m_hdcImg, 0, 0, m_iWidth, m_iHeight, blendFunc );
#endif
}
/////////////////////////// CMemBm implementation end///////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色老头久久综合| 99久久久无码国产精品| 亚洲精品中文字幕乱码三区| 精品国产凹凸成av人导航| 91小视频免费观看| 黄色小说综合网站| 亚洲尤物在线视频观看| 国产精品视频第一区| 久久综合久久综合久久| 欧美一区中文字幕| 欧美美女网站色| 国产免费观看久久| 欧洲精品一区二区| 日韩视频在线观看一区二区| 精品欧美乱码久久久久久| 国产精品午夜电影| 亚洲成人动漫一区| 麻豆成人免费电影| 久久精品国产久精国产爱| 国产揄拍国内精品对白| 国产精品99久久久久久久女警| 岛国av在线一区| 一本到不卡免费一区二区| 欧美日韩一区中文字幕| 日韩精品一区二| 国产精品久久久久久久久免费相片| 国产精品护士白丝一区av| 一区二区高清免费观看影视大全 | 久国产精品韩国三级视频| 久久成人久久鬼色| 99久久精品费精品国产一区二区| 日本韩国欧美国产| 欧美精品一区视频| 一区二区在线观看免费| 精品一区精品二区高清| 91视频在线看| 久久午夜色播影院免费高清| 亚洲女女做受ⅹxx高潮| 国产一区二区三区久久久| 91亚洲精品一区二区乱码| 日韩欧美中文字幕精品| 中文字幕佐山爱一区二区免费| 看片的网站亚洲| 91九色02白丝porn| a级高清视频欧美日韩| 在线观看免费一区| 亚洲国产激情av| 久久精品av麻豆的观看方式| 一本大道av伊人久久综合| 国产亚洲精久久久久久| 日本不卡的三区四区五区| 在线观看日韩一区| 欧美韩国日本不卡| 国产老女人精品毛片久久| 7777精品伊人久久久大香线蕉超级流畅 | 日韩欧美一级特黄在线播放| 亚洲成人av一区二区三区| 91丝袜美腿高跟国产极品老师| 国产精品亲子伦对白| 国产成人综合亚洲网站| 久久久久久久久岛国免费| 美女脱光内衣内裤视频久久影院| 欧美人体做爰大胆视频| 亚洲国产一区二区三区| 欧美日韩一区二区在线视频| 亚洲大片免费看| 日韩免费观看2025年上映的电影 | 欧美亚洲一区三区| 国产视频一区二区三区在线观看| 日本一区二区三区dvd视频在线| 亚洲靠逼com| 欧美成人三级电影在线| 91视频在线观看| 蜜桃久久久久久| 久久精品无码一区二区三区| 顶级嫩模精品视频在线看| 亚洲人精品午夜| 欧美一区二区免费| 波多野结衣欧美| 亚洲丝袜自拍清纯另类| 精品视频一区 二区 三区| 蜜臀精品久久久久久蜜臀 | 欧美国产1区2区| 91精品国产综合久久精品麻豆| 91视频免费观看| 蜜桃视频一区二区三区在线观看| 国产欧美一区二区精品性色超碰| 色综合网色综合| 日韩不卡手机在线v区| 国产精品色呦呦| 日韩免费成人网| 色偷偷88欧美精品久久久| 青青青伊人色综合久久| 国产精品高潮久久久久无| 91精品国产色综合久久不卡电影 | 欧美系列一区二区| 成人app在线观看| 国产精品一区专区| 激情成人综合网| 久久激情五月激情| 久久99在线观看| 亚洲欧美日韩国产综合在线| 欧美精品一区二区三区蜜桃| 欧美亚洲图片小说| 一本色道久久综合狠狠躁的推荐| 久久精品国产网站| 美脚の诱脚舐め脚责91| 一区二区三区产品免费精品久久75| 日韩国产欧美在线观看| 亚洲人成伊人成综合网小说| 日本一区二区动态图| 国产三级久久久| 欧美国产精品一区| 中文字幕在线一区免费| 亚洲国产精品v| 亚洲天堂福利av| 亚洲免费观看高清在线观看| 中文字幕免费不卡| **性色生活片久久毛片| 自拍偷在线精品自拍偷无码专区| 国产精品久久久久一区二区三区 | 欧美久久久久久久久久| 欧美丰满美乳xxx高潮www| 欧美一区二区三区在线电影| 正在播放亚洲一区| 久久久99精品久久| 国产精品污www在线观看| 亚洲欧美日韩在线不卡| 亚洲电影一区二区三区| 日本免费新一区视频| 国产米奇在线777精品观看| 91视频.com| 欧美一区二区三区视频| 久久一日本道色综合| 亚洲一二三四久久| 国产在线播放一区| 欧美在线观看18| 久久久久久久精| 一区二区三区在线免费观看| 日本不卡的三区四区五区| 99免费精品在线| 日韩免费一区二区三区在线播放| 亚洲国产高清不卡| 琪琪久久久久日韩精品| 91视频在线观看| 中文成人综合网| 蜜臀91精品一区二区三区| 色999日韩国产欧美一区二区| 欧美r级电影在线观看| 亚洲妇熟xx妇色黄| 91天堂素人约啪| 欧美日韩国产综合视频在线观看| 国产精品麻豆欧美日韩ww| 日韩vs国产vs欧美| 欧美日韩综合一区| 亚洲蜜桃精久久久久久久| 国产成人精品免费视频网站| 日韩精品一区二区三区老鸭窝| 亚洲午夜在线电影| 在线欧美一区二区| 亚洲精品国产第一综合99久久| 成人在线一区二区三区| 久久久国产一区二区三区四区小说| 午夜精品成人在线| 欧美日韩三级一区| 亚洲va在线va天堂| 99精品视频在线免费观看| 国产日韩欧美在线一区| 精品亚洲国产成人av制服丝袜| 精品久久五月天| 香港成人在线视频| 欧美日韩国产大片| 捆绑紧缚一区二区三区视频| 欧美mv日韩mv| 国产91富婆露脸刺激对白| 中文字幕一区二区三中文字幕| 成人av午夜电影| **性色生活片久久毛片| 在线免费亚洲电影| 日韩电影在线一区| 精品国产免费人成在线观看| 免费高清在线一区| 久久午夜老司机| www.欧美日韩| 亚洲一区二区三区四区中文字幕| 欧美日韩精品一区二区三区| 精品一区二区三区的国产在线播放| 欧美精品一区视频| 91成人在线精品| 激情小说亚洲一区| 亚洲一区自拍偷拍| 久久精品一区八戒影视| 欧美日韩免费观看一区三区| 久久99精品久久久久婷婷| 亚洲欧美日韩电影| 久久精品在线观看| 91精品国产黑色紧身裤美女| 国产福利一区在线| 日韩—二三区免费观看av| 亚洲欧美在线视频|