BOOL CClientCapture::WriteBitmapToDIB( CDC* dc, CBitmap &bitmap)
{
	// 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;
	}

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

	if( hDIB == NULL )
		return FALSE;

	return TRUE;
}
예제 #2
0
void CImageWindow::Screenshot(BOOL bShotImage, BOOL bShotROI, LPCTSTR szFilePath)
{
	m_pImpl->Screenshot(bShotImage, bShotROI, __ddbScreenshot);

	HANDLE hDIB = DDBToDIB(m_pImpl->GetDC(), __ddbScreenshot, NULL);

	if( !hDIB ) return;

	WriteDIB(szFilePath, hDIB);

	::GlobalFree(hDIB);
}
예제 #3
0
BOOL WriteWindow2Mem(BYTE* buf, int W, int H, HDC hDC)
{
	CBitmap 	bitmap;
	CDC 		memDC;
	CRect		rect;

	CDC dc;
	dc.Attach(hDC);
	CDC* pDC = &dc;

	bitmap.CreateCompatibleBitmap(pDC, W,H );

	CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);

	memDC.BitBlt(0, 0, W,H, pDC, 0, 0, SRCCOPY);

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

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

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

		delete[] pLP;
	}

	memDC.SelectObject(pOldBitmap);

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

	if( hDIB == NULL )
		return FALSE;

	// Write it to file
	WriteDIB2Mem(hDIB, W, H, buf);

	// Free the memory allocated by DDBToDIB for the DIB
	GlobalFree( hDIB );

	dc.Detach();

	return TRUE;
}
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;
}
예제 #5
0
BOOL _XHTMLWrapper::LoadHTML( LPTSTR szURLString, int imaxWidth )
{

#ifndef _XDEF_ENABLEQHTMWRAPPER
	return TRUE;
#endif

	TCHAR urlstring[_XDEF_MAX_URLSTRINGLENGTH];
	memset( urlstring, 0, sizeof( TCHAR ) * _XDEF_MAX_URLSTRINGLENGTH );

	if( !CheckExistFile( szURLString ) )
	{
		strcpy( urlstring, gModulePath );
		strcat( urlstring, _T("\\HelpSystem\\error.html") );

		if( !CheckExistFile( urlstring ) )
		{
			return FALSE;
		}
	}
	else
	{
		strcpy( urlstring, szURLString );
	}

	if( strcmpi( m_LastBuildURLAdress, urlstring ) == 0 )
	{
		return TRUE;
	}

	memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH );
	strcpy( m_LastBuildURLAdress, urlstring );
	m_LastBuildScrollPos = -1;

	HDC hdcWindow = ::GetDC( gHWnd );
	HDC hdcDraw   = ::CreateCompatibleDC( hdcWindow );

	if( QHTM_GetHTMLHeight( hdcDraw, urlstring, NULL, QHTM_SOURCE_FILENAME, imaxWidth, &m_uMaxHeight ) )
	{
		LPBYTE mImage;
		
		BITMAPINFO bitmapinfo;		
		bitmapinfo.bmiHeader.biSize			 = sizeof(bitmapinfo.bmiHeader);
		bitmapinfo.bmiHeader.biWidth		 = imaxWidth;
		bitmapinfo.bmiHeader.biHeight		 = -m_uMaxHeight;
		bitmapinfo.bmiHeader.biPlanes		 = 1;
		bitmapinfo.bmiHeader.biBitCount		 = 32;
		bitmapinfo.bmiHeader.biCompression	 = BI_RGB;
		bitmapinfo.bmiHeader.biSizeImage	 = 0;
		bitmapinfo.bmiHeader.biXPelsPerMeter = 100;
		bitmapinfo.bmiHeader.biYPelsPerMeter = 100;
		bitmapinfo.bmiHeader.biClrUsed	     = 0;
		bitmapinfo.bmiHeader.biClrImportant	 = 0;		
		HBITMAP hBitmap = CreateDIBSection(NULL, &bitmapinfo, DIB_RGB_COLORS, (PVOID*)&mImage, NULL, 0);
		
		if( hBitmap )
		{
			//	Select the bitmap and render the HTML onto it.
			hBitmap = (HBITMAP)::SelectObject( hdcDraw, (HGDIOBJ)hBitmap );
			if( QHTM_RenderHTML( hdcDraw, urlstring, NULL, QHTM_SOURCE_FILENAME, imaxWidth ) )
			{
				//	Deselect the bitmap
				hBitmap = (HBITMAP)::SelectObject( hdcDraw, (HGDIOBJ)hBitmap );
				if( !DDBToDIB( hBitmap ) )
				{
					(void)::DeleteObject( hBitmap );
					(void)::ReleaseDC( gHWnd, hdcWindow );
					(void)::DeleteDC( hdcDraw );
					memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH );
					return FALSE;
				}
			}
		
			(void)::DeleteObject( hBitmap );
		}
		else
		{
			(void)::ReleaseDC( gHWnd, hdcWindow );
			(void)::DeleteDC( hdcDraw );
			memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH );
			return FALSE;
		}		
	}
	else
	{
		(void)::ReleaseDC( gHWnd, hdcWindow );
		(void)::DeleteDC( hdcDraw );
		memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH );
		return FALSE;
	}

	(void)::ReleaseDC( gHWnd, hdcWindow );
	(void)::DeleteDC( hdcDraw );

	return TRUE;
}
예제 #6
0
BOOL WriteWindowToDIB( LPTSTR szFile, CWnd* wnd)
{
	CDC *pDC = wnd->GetDC();

	CBitmap 	bitmap;
	CDC 		memDC;
	CRect		rect;

	int W = 640;
	int H = 480;

	memDC.CreateCompatibleDC(pDC);

	wnd->GetWindowRect(rect);

//	W = rect.Width() - 10;
//	H = rect.Height() - 10;

	bitmap.CreateCompatibleBitmap(pDC, W,H );

	CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);

	int x = rect.Width()  - W; x /= 2;
	int y = rect.Height() - H; y /= 2;

	memDC.BitBlt(0, 0, W,H, pDC, x, y, SRCCOPY);

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

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

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

		delete[] pLP;
	}

	memDC.SelectObject(pOldBitmap);

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

	if( hDIB == NULL )
		return FALSE;

	// Write it to file
	WriteDIB( szFile, hDIB );

	// Free the memory allocated by DDBToDIB for the DIB
	GlobalFree( hDIB );

	wnd->ReleaseDC(pDC);
	return TRUE;
}