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);}