首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CStatic 全屏恢复的有关问题

2012-09-03 
CStatic 全屏恢复的问题.我的界面上有个CStatic显示视频, 我想做的是鼠标双击全屏,再双击恢复。参考了CSDN

CStatic 全屏恢复的问题.
我的界面上有个CStatic显示视频, 我想做的是鼠标双击全屏,再双击恢复。

参考了CSDN上的一些代码,全屏是没问题,恢复的话,cstitac的dbclick事件完全无响应,断点无法命中。
当我没全屏的时候,dbclick事件是好用的,帮忙分析一下,谢谢。


头文件:

...

  boolm_isFull;
CWnd*p_static;  
CWnd*saveParent;  
CRectm_rect;
...

CPP文件:

void CxxxxPlayerDlg::OnStnDblclickStatic()
{
// TODO: 在此添加控件通知处理程序代码
//#if 0
if( !m_isFull )
{
m_isFull = true;
p_static =(CWnd *)GetDlgItem(IDC_STATIC_PLAYER);
saveParent = p_static->GetParent();  
p_static->SetParent( GetDesktopWindow() );
GetDesktopWindow()->GetWindowRect(&m_rect); 
p_static->SetWindowPos(&wndTopMost,m_rect.left,m_rect.top,m_rect.right,m_rect.bottom,SWP_SHOWWINDOW);
Invalidate(TRUE);
} else
{
m_isFull = false;
p_static->SetParent(saveParent);
ScreenToClient(&m_rect);
p_static->MoveWindow(m_rect,FALSE);
Invalidate(TRUE);
}
//#endif
}

[解决办法]
重载CxxxxPlayerDlg PreTranslateMessage处理

C/C++ code
BOOL CxxxxPlayerDlg::PreTranslateMessage(MSG* pMsg){   // TODO: 在此添加专用代码和/或调用基类  if(pMsg->message == WM_LBUTTONDBLCLK)  {    static HWND hStaticWnd = NULL;    if(GetDlgItem(IDC_STATIC_PLAYER))    {      hStaticWnd = GetDlgItem(IDC_STATIC_PLAYER)->GetSafeHwnd();    }    if(pMsg->hwnd == hStaticWnd)    {      static BOOL m_isFull = FALSE;      static RECT m_rect;      static DWORD dwStyle = 0;      HWND hwnd = pMsg->hwnd;      if( !m_isFull )      {        m_isFull = true;        ::GetWindowRect(hwnd, &m_rect);        dwStyle = ::GetWindowLong(hwnd, GWL_STYLE);        ::SetWindowLong(hwnd, GWL_STYLE, (dwStyle & ~WS_CHILD)| WS_POPUP);        ::SetParent(hwnd, NULL);              ::SetWindowPos(hwnd, HWND_TOPMOST,//HWND_TOP,//          0,0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),          SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_DRAWFRAME);      }      else      {        m_isFull = false;        POINT ptLT = {m_rect.left, m_rect.top};        POINT ptRB = {m_rect.right, m_rect.bottom};        ::ScreenToClient(GetSafeHwnd(), &ptLT);        ::ScreenToClient(GetSafeHwnd(), &ptRB);                ::SetWindowPos(hwnd, GetSafeHwnd(),           ptLT.x, ptLT.y, ptRB.x-ptLT.x, ptRB.y-ptLT.y,          SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_DRAWFRAME);        ::SetWindowLong(hwnd, GWL_STYLE, dwStyle);        ::SetParent(hwnd, GetSafeHwnd());      }      TRACE(_T("WM_LBUTTONDBLCLK hWnd=%ld\n"), pMsg->hwnd);      return TRUE;    }  }  return CDialog::PreTranslateMessage(pMsg);} 

热点排行