18,363
社区成员




//定义接受压缩图片的信息
typedef struct bmpheader
{
int indexBitmap; //图片索引号
int x , y ; //图片的 横向、纵向 块号
int nLength ; //块压缩之后的大小
int nSum ; //计数块
int nDisplay ;
}BMPHEADER , *pBMPHEADER;
//接受发送标志
void CalgrDlg::RecvFlag()
{
memset( (void*)buff , 0 , strlen(SINGEL_SEND) );
recvData(buff , sizeof(SINGEL_SEND) );
if ( memcmp( (void*)buff , SINGEL_SEND , sizeof(SINGEL_SEND) ) != 0 )
{
flag_out = 0 ;
MessageBox( _TEXT("接受标志错误!") );
}
}
//接收数据
void CalgrDlg::recvData( char *temp , int len )
{
recvtotal = 0 ;
recvthistime = 0 ;
while ( recvtotal < len )
{
recvthistime = recv( SockClient , temp + recvtotal , len - recvtotal , 0 );
recvtotal += recvthistime ;
}
}
//发送数据
void CalgrDlg::sendData( char *temp , int len )
{
recvtotal = 0 ;
recvthistime = 0 ;
while ( recvtotal < len )
{
recvthistime = send( SockClient , temp + recvtotal , len - recvtotal , 0 ) ;
recvtotal += recvthistime ;
}
}
这个函数里面send有问题,发送就会增加4k内存
void CalgrDlg::GetScreen1() //获取屏幕内存地址
{
SendBmpheader.indexBitmap++;
SendBmpheader.nSum = 0 ;
bmp.m_hObject = ::CreateDIBSection( memdc.m_hDC , &bi ,DIB_RGB_COLORS ,(LPVOID*)&pbitmaps2, NULL , 0 );
memdc.SelectObject(&bmp);
memdc.BitBlt( 0 , 0 ,nWidth , nHeith ,pdeskdc1 , 0,0,SRCCOPY );
// cmp(pbitmaps , pbitmaps2);
SendBmpheader.nDisplay = 1 ;
RecvFlag();
sendData( (char*)&SendBmpheader , lenOfBmpheader ) ;
bmp.DeleteObject();
}
void CalgrDlg::GetScreen1() //获取屏幕内存地址
{
SendBmpheader.indexBitmap++;
SendBmpheader.nSum = 0 ;
HBITMAP hBmp = ::CreateDIBSection( memdc.m_hDC , &bi ,DIB_RGB_COLORS ,(LPVOID*)&pbitmaps2, NULL , 0 );
//emdc.SelectObject(&bmp);
HBITMAP hOldBmp = (HBITMAP)::SelectObject(memdc.m_hDC, hBmp);
memdc.BitBlt( 0 , 0 ,nWidth , nHeith ,pdeskdc1 , 0,0,SRCCOPY );
// cmp(pbitmaps , pbitmaps2);
SendBmpheader.nDisplay = 1 ;
RecvFlag();
sendData( (char*)&SendBmpheader , lenOfBmpheader ) ;
//bmp.DeleteObject();
::SelectObject(memdc.m_hDC, hOldBmp);
::DeleteObject(hBmp); //如是hBmp句柄没被删除, 则CreateDIBSection返回的缓冲区内存就不会被释放
}