开发了一个用来在IE上显示多路视频的控件,在控件中嵌入多窗体,现在要实现控件全屏功能,但是在IE 中全屏一会之后,全屏的窗口将被压缩到左上角,无法达到真正的全屏的问题,(查了很久,就是不明白为什么会这样,在OCX容器中测试没问题)在网上有很多人也遇到类似功能,真心求教,立即结贴.
我的代码如下:
if (m_bAllFull == bFull)
{
FireOnMultiWndNotify(emFullScreen, m_bAllFull);
return;
}
if (bFull)
{
::GetWindowRect(GetSafeHwnd(), &m_rcNoneFull);
m_hParent = ::GetParent(GetSafeHwnd());
::SetParent(GetSafeHwnd(), NULL);
INT nScrWidth = GetSystemMetrics(SM_CXSCREEN);
INT nScrHeight = GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(GetSafeHwnd(), HWND_TOP, 0, 0, nScrWidth, nScrHeight, SWP_SHOWWINDOW);
}
else
{
::SetWindowPos(GetSafeHwnd(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE);
::SetParent(GetSafeHwnd(), m_hParent);
::ScreenToClient(m_hParent, (LPPOINT)&m_rcNoneFull);
::ScreenToClient(m_hParent, ((LPPOINT)&m_rcNoneFull)+1);
::MoveWindow(GetSafeHwnd(), m_rcNoneFull.left, m_rcNoneFull.top,
m_rcNoneFull.right-m_rcNoneFull.left,
m_rcNoneFull.bottom-m_rcNoneFull.top,
TRUE);
}
m_bAllFull = bFull;
我的代码如下:
if (m_bAllFull == bFull)
{
FireOnMultiWndNotify(emFullScreen, m_bAllFull);
return;
}
if (bFull)
{
::GetWindowRect(GetSafeHwnd(), &m_rcNoneFull);
m_hParent = ::GetParent(GetSafeHwnd());
::SetParent(GetSafeHwnd(), NULL);
INT nScrWidth = GetSystemMetrics(SM_CXSCREEN);
INT nScrHeight = GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(GetSafeHwnd(), HWND_TOP, 0, 0, nScrWidth, nScrHeight, SWP_SHOWWINDOW);
}
else
{
::SetWindowPos(GetSafeHwnd(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE);
::SetParent(GetSafeHwnd(), m_hParent);
::ScreenToClient(m_hParent, (LPPOINT)&m_rcNoneFull);
::ScreenToClient(m_hParent, ((LPPOINT)&m_rcNoneFull)+1);
::MoveWindow(GetSafeHwnd(), m_rcNoneFull.left, m_rcNoneFull.top,
m_rcNoneFull.right-m_rcNoneFull.left,
m_rcNoneFull.bottom-m_rcNoneFull.top,
TRUE);
}
m_bAllFull = bFull;
::SetWindowPos(GetSafeHwnd(), HWND_TOPMOST, 0, 0, nScrWidth, nScrHeight, SWP_SHOWWINDOW|SWP_FRAMECHANGED); 这样呢
CRect WindowRect;
GetWindowRect(&WindowRect);
CRect ClientRect;
int nFullWidth = GetSystemMetrics(SM_CXSCREEN);
int nFullHeight = GetSystemMetrics(SM_CYSCREEN); RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);
ClientToScreen(&ClientRect);
m_FullScreenRect.left = WindowRect.left - ClientRect.left;
m_FullScreenRect.top = WindowRect.top - ClientRect.top;
m_FullScreenRect.right = WindowRect.right - ClientRect.right + nFullWidth;
m_FullScreenRect.bottom = WindowRect.bottom - ClientRect.bottom + nFullHeight;
WINDOWPLACEMENT wndpl;
wndpl.length = sizeof(WINDOWPLACEMENT);
wndpl.flags = 0;
wndpl.showCmd = SW_SHOWNORMAL;
wndpl.rcNormalPosition = m_FullScreenRect;
SetWindowPlacement(&wndpl);