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

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

?? clientcapture.cpp

?? 進行拷屏打印
?? CPP
字號:

#include "stdafx.h"
#include "ClientCapture.h"


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

/* DIB Macros*/
#define RECTWIDTH(lpRect)     ((lpRect)->right - (lpRect)->left)
#define RECTHEIGHT(lpRect)    ((lpRect)->bottom - (lpRect)->top)


/////////////////////////////////////////////////////////////////////////////
// CClientCapture::CClientCapture - Constructor

CClientCapture::CClientCapture()
{
	m_pBMI = 0;
	m_pBits = 0;
	hDIB = 0;
}


/////////////////////////////////////////////////////////////////////////////
// CClientCapture::~CClientCapture - Destructor

CClientCapture::~CClientCapture()
{
	if(hDIB)
		GlobalFree( hDIB );

	hDIB = 0;
	m_pBMI = 0;
	m_pBits = 0;

}



void CClientCapture::Capture(CDC *dc, CRect rectDIB) 
{

	WriteWindowToDIB(dc, rectDIB);

}



BOOL CClientCapture::WriteWindowToDIB( CDC* dc, CRect rect)
{
	CBitmap 	bitmap;
	CDC 		memDC;

	memDC.CreateCompatibleDC(dc); 
	bitmap.CreateCompatibleBitmap(dc, rect.Width(),rect.Height() );
	
	CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
	memDC.BitBlt(0, 0, rect.Width(),rect.Height(), dc, 0, 0, SRCCOPY); 

	// Create logical palette if device support a palette
	
	if( dc->GetDeviceCaps(RASTERCAPS) & RC_PALETTE )
	{
		UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256);
		LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
		pLP->palVersion = 0x300;

		pLP->palNumEntries = 
			GetSystemPaletteEntries( *dc, 0, 255, pLP->palPalEntry );

		// Create the palette
		pal.CreatePalette( pLP );

		delete[] pLP;
	}

	memDC.SelectObject(pOldBitmap);

	// Convert the bitmap to a DIB
	hDIB = DDBToDIB( bitmap, BI_RGB, &pal, dc);

	if( hDIB == NULL )
		return FALSE;

	return TRUE;
}




BOOL CClientCapture::Paint(HDC hDC, CPalette * m_pPalette, LPRECT lpDCRect, LPRECT lpDIBRect) const
{

	if (!m_pBMI)
		return FALSE;

	HPALETTE hPal = NULL;           // Our DIB's palette
	HPALETTE hOldPal = NULL;        // Previous palette

	// Get the DIB's palette, then select it into DC
	if (m_pPalette != NULL)
	{
		hPal = (HPALETTE) m_pPalette->m_hObject;

		// Select as background since we have
		// already realized in forground if needed
		hOldPal = ::SelectPalette(hDC, hPal, TRUE);
	}

	/* Make sure to use the stretching mode best for color pictures */
	::SetStretchBltMode(hDC, COLORONCOLOR);

	/* Determine whether to call StretchDIBits() or SetDIBitsToDevice() */
	BOOL bSuccess = FALSE;
	if ((RECTWIDTH(lpDCRect)  == RECTWIDTH(lpDIBRect)) &&
	   (RECTHEIGHT(lpDCRect) == RECTHEIGHT(lpDIBRect)))
		bSuccess = ::SetDIBitsToDevice(hDC,        // hDC
								   lpDCRect->left,             // DestX
								   lpDCRect->top,              // DestY
								   RECTWIDTH(lpDCRect),        // nDestWidth
								   RECTHEIGHT(lpDCRect),       // nDestHeight
								   lpDIBRect->left,            // SrcX
								   (int)Height() -
									  lpDIBRect->top -
									  RECTHEIGHT(lpDIBRect),     // SrcY
								   0,                          // nStartScan
								   (WORD)Height(),             // nNumScans
								   m_pBits,                    // lpBits
								   m_pBMI,                     // lpBitsInfo
								   DIB_RGB_COLORS);            // wUsage
   else
	  bSuccess = ::StretchDIBits(hDC,            // hDC
							   lpDCRect->left,               // DestX
							   lpDCRect->top,                // DestY
							   RECTWIDTH(lpDCRect),          // nDestWidth
							   RECTHEIGHT(lpDCRect),         // nDestHeight
							   lpDIBRect->left,              // SrcX
							   lpDIBRect->top,               // SrcY
							   RECTWIDTH(lpDIBRect),         // wSrcWidth
							   RECTHEIGHT(lpDIBRect),        // wSrcHeight
							   m_pBits,                      // lpBits
							   m_pBMI,                       // lpBitsInfo
							   DIB_RGB_COLORS,               // wUsage
							   SRCCOPY);                     // dwROP

 
	/* Reselect old palette */
	if (hOldPal != NULL)
	{
		::SelectPalette(hDC, hOldPal, TRUE);
	}

	
   return bSuccess;
}





// DDBToDIB		- Creates a DIB from a DDB
// bitmap		- Device dependent bitmap
// dwCompression	- Type of compression - see BITMAPINFOHEADER
// pPal			- Logical palette
HANDLE CClientCapture::DDBToDIB( CBitmap& bitmap, DWORD dwCompression, CPalette* pPal, 	CDC *dc) 
{
	BITMAP			bm;
	BITMAPINFOHEADER	bi;
	LPBITMAPINFOHEADER 	lpbi;
	DWORD			dwLen;
	//HANDLE			hDIB;
	HANDLE			handle;
	HDC 			hDC;
	HPALETTE		hPal;


	ASSERT( bitmap.GetSafeHandle() );

	// The function has no arg for bitfields
	if( dwCompression == BI_BITFIELDS )
		return NULL;

	// If a palette has not been supplied use defaul palette
	hPal = (HPALETTE) pPal->GetSafeHandle();
	if (hPal==NULL)
		hPal = (HPALETTE) GetStockObject(DEFAULT_PALETTE);

	// Get bitmap information
	bitmap.GetObject(sizeof(bm),(LPSTR)&bm);

	// Initialize the bitmapinfoheader
	bi.biSize		= sizeof(BITMAPINFOHEADER);
	bi.biWidth		= bm.bmWidth;
	bi.biHeight 		= bm.bmHeight;
	bi.biPlanes 		= 1;
	bi.biBitCount		= bm.bmPlanes * bm.bmBitsPixel;
	bi.biCompression	= dwCompression;
	bi.biSizeImage		= 0;
	bi.biXPelsPerMeter	= 0;
	bi.biYPelsPerMeter	= 0;
	bi.biClrUsed		= 0;
	bi.biClrImportant	= 0;

	// Compute the size of the  infoheader and the color table
	int nColors = (1 << bi.biBitCount);
	if( nColors > 256 ) 
		nColors = 0;
	dwLen  = bi.biSize + nColors * sizeof(RGBQUAD);

	// We need a device context to get the DIB from
	hDC = dc->GetSafeHdc();

	//hDC = GetDC(NULL);
	hPal = SelectPalette(hDC,hPal,FALSE);
	RealizePalette(hDC);

	
	// Allocate enough memory to hold bitmapinfoheader and color table
	if(hDIB) GlobalFree( hDIB );

	hDIB = GlobalAlloc(GMEM_FIXED,dwLen);

	if (!hDIB){
		SelectPalette(hDC,hPal,FALSE);
		return NULL;
	}

	lpbi = (LPBITMAPINFOHEADER)hDIB;

	*lpbi = bi;

	// Call GetDIBits with a NULL lpBits param, so the device driver 
	// will calculate the biSizeImage field 
	GetDIBits(hDC, (HBITMAP)bitmap.GetSafeHandle(), 0L, (DWORD)bi.biHeight,
			(LPBYTE)NULL, (LPBITMAPINFO)lpbi, (DWORD)DIB_RGB_COLORS);

	bi = *lpbi;

	// If the driver did not fill in the biSizeImage field, then compute it
	// Each scan line of the image is aligned on a DWORD (32bit) boundary
	if (bi.biSizeImage == 0){
		bi.biSizeImage = ((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8) 
						* bi.biHeight;

		// If a compression scheme is used the result may infact be larger
		// Increase the size to account for this.
		if (dwCompression != BI_RGB)
			bi.biSizeImage = (bi.biSizeImage * 3) / 2;
	}

	// Realloc the buffer so that it can hold all the bits
	dwLen += bi.biSizeImage;
	if (handle = GlobalReAlloc(hDIB, dwLen, GMEM_MOVEABLE))
		hDIB = handle;
	else{
		GlobalFree(hDIB);
		hDIB = 0;
		// Reselect the original palette
		SelectPalette(hDC,hPal,FALSE);

		return NULL;
	}

	// Get the bitmap bits
	lpbi = (LPBITMAPINFOHEADER)hDIB;
	m_pBMI = (LPBITMAPINFO)hDIB;
	m_pBits = (LPBYTE)hDIB + (bi.biSize + nColors * sizeof(RGBQUAD));

	// FINALLY get the DIB
	BOOL bGotBits = GetDIBits( hDC, (HBITMAP)bitmap.GetSafeHandle(),
				0L,				// Start scan line
				(DWORD)bi.biHeight,		// # of scan lines
				(LPBYTE) m_pBits,//lpbi 			// address for bitmap bits
				(LPBITMAPINFO)lpbi,		// address of bitmapinfo
				(DWORD)DIB_RGB_COLORS);		// Use RGB for color table

	if( !bGotBits )
	{
		GlobalFree(hDIB);
		hDIB = 0;
		SelectPalette(hDC,hPal,FALSE);

		return NULL;
	}

	SelectPalette(hDC,hPal,FALSE);

	return hDIB;
}







DWORD CClientCapture::Height() const
{
	if (!m_pBMI)
		return 0;
	
	/* return the DIB height */
	return m_pBMI->bmiHeader.biHeight;
}



void CClientCapture::OnDraw(HDC hDC, CRect rcRect, CRect rect)
{
	Paint(hDC, &pal, rcRect, rect);
}




// WriteDIB		- Writes a DIB to file
// Returns		- TRUE on success
// szFile		- Name of file to write to
// hDIB			- Handle of the DIB
BOOL CClientCapture::WriteDIB( CString csFile)
{
	BITMAPFILEHEADER	hdr;
	LPBITMAPINFOHEADER	lpbi;

	if (!hDIB)
		return FALSE;

	CFile file;
	if( !file.Open( csFile, CFile::modeWrite|CFile::modeCreate) )
		return FALSE;

	lpbi = (LPBITMAPINFOHEADER)hDIB;

	int nColors = 1 << lpbi->biBitCount;
	if( nColors > 256 ) 
		nColors = 0;

	// Fill in the fields of the file header 
	hdr.bfType		= ((WORD) ('M' << 8) | 'B');	// is always "BM"
	hdr.bfSize		= GlobalSize (hDIB) + sizeof( hdr );
	hdr.bfReserved1 	= 0;
	hdr.bfReserved2 	= 0;
	hdr.bfOffBits		= (DWORD) (sizeof( hdr ) + lpbi->biSize +
						nColors * sizeof(RGBQUAD));

	// Write the file header 
	file.Write( &hdr, sizeof(hdr) );

	// Write the DIB header and the bits 
	file.Write( lpbi, GlobalSize(hDIB) );

	return TRUE;
}

void CClientCapture::Release()
{
	if(hDIB)
		GlobalFree( hDIB );

	hDIB = 0;
	m_pBMI = 0;
	m_pBits = 0;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费不卡在线观看| 日本美女一区二区三区视频| 日韩欧美黄色影院| 666欧美在线视频| 欧美日韩免费一区二区三区 | 91精品免费在线观看| 欧美天天综合网| 91麻豆精品国产91久久久使用方法 | 欧美日韩亚州综合| 91精品久久久久久蜜臀| 欧美一区二区私人影院日本| 欧美一区二区视频在线观看2020 | 精品美女在线播放| 欧美va天堂va视频va在线| 精品国产一区二区三区久久久蜜月| 欧美一级欧美三级| 26uuu色噜噜精品一区| 国产日韩欧美综合在线| 亚洲丝袜美腿综合| 日韩中文字幕一区二区三区| 久99久精品视频免费观看| 国产成人自拍网| 91捆绑美女网站| 欧美日韩成人一区二区| 精品动漫一区二区三区在线观看| 国产视频不卡一区| 亚洲自拍偷拍麻豆| 狠狠久久亚洲欧美| 91玉足脚交白嫩脚丫在线播放| 欧美丝袜丝交足nylons| 亚洲精品一区二区三区福利| 国产精品女上位| 五月婷婷色综合| 国产精品自在欧美一区| 欧美揉bbbbb揉bbbbb| 久久午夜电影网| 亚洲一二三区视频在线观看| 精品一区二区在线看| 色综合久久天天综合网| 日韩欧美在线不卡| 亚洲精品国产无套在线观 | 日韩免费一区二区| 亚洲男人电影天堂| 国产一区二区三区久久久| 一本一道综合狠狠老| 亚洲精品在线观| 亚洲高清中文字幕| 成人app下载| 精品精品欲导航| 五月天亚洲精品| 91同城在线观看| 国产欧美一区二区精品秋霞影院| 亚洲gay无套男同| 色婷婷av一区二区三区软件| 精品欧美一区二区三区精品久久| 亚洲黄色性网站| 国产99久久久国产精品| 欧美一区二区三区四区久久| 亚洲免费观看在线视频| 成人美女视频在线观看| 精品国产一区二区三区不卡| 亚洲成av人在线观看| 91浏览器打开| 亚洲精品欧美二区三区中文字幕| 国产露脸91国语对白| 欧美成人r级一区二区三区| 日韩1区2区3区| 69精品人人人人| 亚洲成av人片| 91国偷自产一区二区开放时间 | 日本欧美大码aⅴ在线播放| 色妹子一区二区| 亚洲精品视频在线观看网站| 丁香另类激情小说| 国产精品乱码人人做人人爱| 国产一区 二区 三区一级| 日韩欧美国产一区二区在线播放 | 91在线视频网址| 国产精品亲子乱子伦xxxx裸| 大白屁股一区二区视频| 欧美国产一区视频在线观看| 高清不卡一区二区在线| 日本一二三四高清不卡| 成人国产免费视频| 亚洲免费在线电影| 欧美亚洲丝袜传媒另类| 天堂久久久久va久久久久| 欧美卡1卡2卡| 美女视频一区在线观看| 精品国产一区二区精华| 大美女一区二区三区| 国产在线一区二区综合免费视频| 国产精品色呦呦| 亚洲色图清纯唯美| 一区二区三区中文免费| 欧美日韩国产另类一区| 99re这里只有精品首页| 激情成人午夜视频| 日本不卡高清视频| 一区二区三区在线免费观看| 国产精品视频一二三| 精品国内片67194| 欧美日韩视频专区在线播放| 99精品国产视频| 国产成人8x视频一区二区| 激情综合网av| 久久精品国产**网站演员| 天堂一区二区在线| 亚洲va在线va天堂| 亚洲午夜羞羞片| 一区二区欧美精品| 亚洲国产毛片aaaaa无费看| 亚洲男人的天堂网| 亚洲日本va午夜在线影院| 综合久久久久综合| 亚洲精品国产无套在线观| 亚洲精品久久久蜜桃| 亚洲精品免费电影| 亚洲午夜精品在线| 日韩中文字幕av电影| 亚洲高清免费观看高清完整版在线观看| 亚洲欧洲精品成人久久奇米网| 国产精品成人免费精品自在线观看 | 成人高清免费在线播放| 国产精品一区一区| 岛国精品在线播放| 91视频免费播放| 日本久久一区二区| 精品视频999| 91麻豆精品国产| 精品入口麻豆88视频| 精品久久五月天| 欧美国产综合一区二区| 亚洲日本丝袜连裤袜办公室| 亚洲精品视频在线观看免费| 亚洲一区二区三区激情| 视频一区二区国产| 国产综合色精品一区二区三区| 国产乱对白刺激视频不卡| 春色校园综合激情亚洲| 91国偷自产一区二区三区观看| 欧洲国产伦久久久久久久| 欧美精品第1页| 精品久久一区二区| 中文字幕在线不卡一区| 亚洲丶国产丶欧美一区二区三区| 日韩国产欧美在线视频| 国产高清久久久| 91精品婷婷国产综合久久| 欧美电视剧在线看免费| 国产精品理论在线观看| 亚洲午夜电影在线| 国产精品一区在线观看你懂的| 波多野结衣精品在线| 欧美久久久久中文字幕| 久久久久久久久久久久电影| 一区二区三区蜜桃网| 伦理电影国产精品| 色婷婷av一区二区三区大白胸 | 亚洲天堂av一区| 老司机午夜精品99久久| 成人国产亚洲欧美成人综合网| 欧美欧美欧美欧美首页| 国产精品久久久久久亚洲伦| 日精品一区二区| 91麻豆自制传媒国产之光| 欧美tickle裸体挠脚心vk| 一区二区三区成人| 国产成人午夜精品影院观看视频 | 天堂成人免费av电影一区| 粉嫩蜜臀av国产精品网站| 91麻豆精品久久久久蜜臀| 国产精品欧美一区喷水| 久久精品国产999大香线蕉| 在线观看视频一区二区| 中文字幕av资源一区| 九九精品一区二区| 7799精品视频| 亚洲成人动漫在线观看| 一本一道波多野结衣一区二区| 久久你懂得1024| 蜜臀av国产精品久久久久| 欧美日韩日日夜夜| 亚洲一区二区三区美女| 99re成人在线| 国产精品午夜在线| 国产精品一区二区果冻传媒| 欧美一区二区三区在线观看| 亚洲乱码中文字幕综合| 成人app在线观看| 国产欧美综合在线观看第十页| 经典三级在线一区| 精品国产区一区| 精品一区二区三区的国产在线播放| 欧美日韩视频不卡| 五月婷婷色综合| 欧美一区二区三区四区高清| 日韩在线观看一区二区| 欧美高清dvd| 日本午夜精品视频在线观看|