void threadenter()
{
m_isClosed = false;
CWatchDialog dlg(this);//如果要使用非模态对话框可以在DoModal之前把CButton对象地址赋值给dlg成员的CButton成员指针
HANDLE hThread = (HANDLE)_beginthread(CRemoteClientDlg::threadEntryForWatchData, 0, this);
//GetDlgItem(IDC_BTN_START_WATCH)->EnableWindow(FALSE);//禁用按钮,在监控对话框关闭时恢复//使用模态对话框就行
//GetParent()->GetDlgItem(IDC_BTN_START_WATCH)->EnableWindow(TRUE);
dlg.DoModal();
m_isClosed = true;
WaitForSingleObject(hThread, 500);//等待线程结束
}
void test()
{
while (!m_isClosed) {//退出条件
if (m_isFull == false) {//更新数据到缓存
int ret = SendMessage(WM_SEND_PACKET, 6 << 1 | true);//子线程发送命令
if (ret == 6) {
BYTE* pData = (BYTE*)pClient->GetPacket().strData.c_str();
//TODO:存入CImage
HGLOBAL hMen = GlobalAlloc(GMEM_MOVEABLE, 0);//?创建一个描述符
if (hMen == NULL) {
TRACE("内存不足了!!\r\n");
Sleep(1);
continue;
}
IStream* pStream = NULL;
HRESULT hRet = CreateStreamOnHGlobal(hMen, TRUE, &pStream);
if (hRet == S_OK) {//创建内存成功
ULONG length = 0;
pStream->Write(pData, pClient->GetPacket().strData.size(), &length);
LARGE_INTEGER bg = { 0 };
pStream->Seek(bg, STREAM_SEEK_SET, NULL);//重新指定流指针指向
if ((HBITMAP)m_image != NULL)
m_image.Destroy();
/*CImage*/m_image.Load(pStream);
m_isFull = true;
}
}
else {
Sleep(1);
}
}
else Sleep(1);
}
}
void CWatchDialog::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nIDEvent == 0) {
CRemoteClientDlg* pParent = (CRemoteClientDlg*)GetParent();
if (pParent->isFull()) {
CRect rect;
m_picture.GetWindowRect(rect);//依照当前对话框大小显示缩放
//pParent->GetImage().BitBlt(m_picture.GetDC()->GetSafeHdc(),0,0,SRCCOPY);//直接拷贝
if (m_nObjWidth == -1) {
m_nObjWidth = pParent->GetImage().GetWidth();
m_nObjHeight = pParent->GetImage().GetHeight();//获取被控端床过来图片的尺寸
}
pParent->GetImage().StretchBlt(/*CStatic*/m_picture.GetDC()->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), SRCCOPY);//缩放
m_picture.InvalidateRect(NULL);//调用重绘函数
pParent->GetImage().Destroy();
pParent->SetImageStatus();//设置状态为空
}
}
CDialogEx::OnTimer(nIDEvent);
}