运行程序后会产生一个对话框界面,通过点击对话框界面上的按钮来设置相机参数,之后点击“开始”按钮来开始图像的采集工作。在采集过程中,需要把采集的图像全屏显示在显示器上。
现在的状态是能够将采集的图像显示在程序界面的控件IDC_RADIO_1上,m_pMydib相当于是采集图像的指针,代码如下:
void CMultipleCameraRawWriteDlg::DrawImage(int nWidth,int nHeight,int nCamera)
{
CRect rcDIB;
CRect rcDC;
rcDIB = CRect(0, 0, nWidth, nHeight);
rcDIB.OffsetRect(0, 0);

CDC* pDC = this->GetDlgItem(IDC_RADIO_1+nCamera)->GetDC();
HDC hDispHdc = pDC->GetSafeHdc();
pDC->GetWindow()->GetClientRect(rcDC);
m_pMydib->Paint(hDispHdc, rcDC, rcDIB);
ReleaseDC(pDC);
}
现在尝试在获取图像后创建与显示屏大小相等的窗口来全屏显示图像,创建窗口代码如下:
BOOL CScreensaverWnd::Create()
{
if(lpszClassName==NULL)
   {
lpszClassName=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW, ::LoadCursor(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_NOCURSOR)));
//注册类;IDC_NOCURSOR为新建光标的ID,这个光标没有任何图案
}
CRect rect(0, 0, ::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN)); //得到显示屏的长度和宽度
CreateEx(WS_EX_TOPMOST, lpszClassName, _T(""), WS_VISIBLE|WS_POPUP, 
rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, GetSafeHwnd(), NULL, NULL); //创建一个全屏窗口
return TRUE;
}
之后调用显示函数进行绘图:
void CMultipleCameraRawWriteDlg::DrawImage(int nWidth,int nHeight,int nCamera)
{
        CClientDC dc(this);
CRect rcDIB;
CRect rcDC;
rcDIB = CRect(0, 0, nWidth, nHeight);
rcDIB.OffsetRect(0, 0);

CDC* pDC = &dc;//this->GetDlgItem(IDC_RADIO_1+nCamera)->GetDC();
HDC hDispHdc = pDC->GetSafeHdc();
pDC->GetWindow()->GetClientRect(rcDC);
m_pMydib->Paint(hDispHdc, rcDC, rcDIB);
ReleaseDC(pDC);
}
这样获取的图像显示在了整个程序的对话框界面上,但是并没有全屏显示。感觉是在刷新窗口的InitInstance没有顺利更新,仍然是运行了CMultipleCameraRawWriteDlg dlg;
m_pMainWnd = &dlg;来刷新对话框,而不是将主窗口更新为新创建的全屏窗口。
求教如何在点击了对话框界面上的“开始”按钮后,将每次刷新的界面变为新创建的全屏窗口,能够顺利将图像绘制在全屏窗口中?对话框C++界面