我写了一个传输屏幕的程序,被控端发送屏幕信息到主控端进行显示然而主控端一打开接受窗口就卡死,就不动了关闭这个窗口主窗口也会被关掉。另外如果我只传输一帧数据是可以正常接受的...
我写了一个传输屏幕的程序, 被控端发送屏幕信息到主控端进行显示
然而主控端一打开接受窗口就卡死,就不动了 关闭这个窗口 主窗口也会被关掉。
另外如果我只传输一帧数据是可以正常接受的
下面是主要代码 求大神指教
void CScreenDlg::GetScreen()
{
MsgHead MsgSend;
MsgSend.dwCmd = CMD_GETFIRST_SCREEN;
MsgSend.dwSize = 0;
if(!SendMsg(m_MainSocket, NULL, &MsgSend))//发出请求屏幕传输的要求
{
::MessageBox(NULL, "屏幕传输请求失败", "出错", MB_OK);
closesocket(m_MainSocket);
return ;
}
//以下为屏幕的获取, 一直获取并显示 直到接收不到
while(1)
{
MsgHead MsgRecv;
if(!RecvData(m_MainSocket, (char *)&MsgRecv, sizeof(MsgHead)))
{
::MessageBox(NULL, "屏幕数据接收,命令接收失败", "出错", MB_OK);
closesocket(m_MainSocket);
return ;
}
bmfHdr.bfType = 0x4D42; // "BM" // 设置位图文件头
bmfHdr.bfSize = MsgRecv.dwExtend1;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = MsgRecv.dwExtend2;
if(!RecvData(m_MainSocket,(char *)pData,MsgRecv.dwSize))//pdata 全局变量 退出时释放
{
::MessageBox(NULL, "屏幕数据接收,数据接收失败", "出错", MB_OK);
closesocket(m_MainSocket);
return ;
}
Invalidate(TRUE);
}
}
void CScreenDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
//双缓存防止闪烁
CWnd* hwnd = GetDlgItem(IDC_PIC);
HDC hDesDC = hwnd->GetDC()->m_hDC;
HDC hSrcDC = CreateCompatibleDC(hDesDC);
HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), strFilePath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
BITMAP bm;
GetObject(hBitmap, sizeof(BITMAP), &bm);
SelectObject(hSrcDC, hBitmap);
CRect rect;
hwnd->GetClientRect(&rect);
BitBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, SRCCOPY);
}
展开