视频通道的全屏显示响应

目的:

双击某一通道,全屏显示。再次双击,回复到全屏前的分屏方式。并能保持该通道的外框存在,不丢失。

  • 在双击事件响应函数里加入如下代码,其中:
  1. 重绘区域选用了ValidateRect()函数,值得注意。
  2. 采用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.

posted on 2011-08-26 17:49  LateStop  阅读(412)  评论(0)    收藏  举报

导航