视频通道的全屏显示响应
目的:
双击某一通道,全屏显示。再次双击,回复到全屏前的分屏方式。并能保持该通道的外框存在,不丢失。
- 在双击事件响应函数里加入如下代码,其中:
- 重绘区域选用了ValidateRect()函数,值得注意。
- 采用FromHandle()函数,由Handle得到窗口指针的用法值得注意。
void CMSVideoMonitorView::OnStnDblclickStatic0()
{
// TODO: 在此添加控件通知处理程序代码
//由点得到控件HANDLE,再得到窗口的指针
CPoint Pt;
GetCursorPos(&Pt);
HWND hCurrentDbClicked = ::WindowFromPoint(Pt);
CWnd* pWnd = FromHandle(hCurrentDbClicked);
//得到客户区的矩形大小
CRect rectClientRect;
GetClientRect(rectClientRect);
//若不是全屏状态,将该控件全屏显示
if (!GetDocument()->m_bIsFullScreen)
{
pWnd->MoveWindow(4,4,rectClientRect.Width() - 4,rectClientRect.Height() - 4);
pWnd->ShowWindow(SW_SHOW);
GetDocument()->m_bIsFullScreen = true;
//将其它窗口隐藏
for (int i = 0; i < 16; i++)
{
if (m_cAllStatics[i] != pWnd)//当前窗口不隐藏
{
m_cAllStatics[i]->ShowWindow(SW_HIDE);
}
}
}
else//将窗口还原
{
OnArrangeScreen(GetDocument()->m_nNumOfChannels);
}
//重绘被点击的控件所占的区域
CRect rectReDraw;
pWnd->GetWindowRect(rectReDraw);
ScreenToClient(&rectReDraw);
InvalidateRect(rectReDraw);
}
另外需要在OnArrangeScreen()里,安排完屏幕后,将m_bIsFullScreen置为false.
浙公网安备 33010602011771号