如题

解决方案 »

  1.   

    CBitmap bitmap = CBitmap::FromHandle(hBitmap);//首先发送位图的bits
    byte* pBits = new byte[1024*1024*10];//分配10MB内存,根据你自己位图的大小
    DWORD actualSize = bitmap.GetBitmapBits(1024*1024*10, pBits);//将位图拷贝到buffer中,返回值是实际大小
    send(hSocket, pBits, actualSize,0);//调用send函数发送位图数据,这句代码看做伪代码,实际上要判断send的返回值,循环发送actualSize大小的数据,过大的数据一次无法发送完。
    delete []pBits;//发送完后释放内存//然后发送位图的长宽等
    BITMAP map;
    bitmap.GetBitmap(&map);//获取BITMAP结构
    send(hSocket,(char*)&map, sizeof(BITMAP));//==========================接收到之后
    byte *pBits = (byte*)pRecvBuf;//第一次接收到的bits
    BITMAP *pMap = (BITMAP*)pRecvBuf;//第二次接收到的BITMAP结构
    pMap->bmBits = pBits;//将bits信息赋予BITMAP结构
    CBitmap bitmap;
    bitmap.CreateBitmapIndirect(pMap);//由BITMAP结构创建位图
    HBITMAP hBitmap = (HBITMAP)bitmap;//HBITMAP运算符获取到句柄
      

  2.   

    GetDIBits 获取位图的指针
    将位图指针的内容发送到WinSock中
      

  3.   

    如果不是在显示设备上,则用GetObject获取