void FMediaContainer::UpdateLayout() { FRect r; GetClientRect(&r); if (m_ControlBar.IsWindowVisible()) { FRect r1 = r; r1.bottom = m_CBarHeight; m_ControlBar.MoveWindow(&r1, TRUE); r.top = r1.bottom; m_ControlBar.UpdateWindow(); } if (m_pAdWindows[0] && m_pAdWindows[0]->IsAdShowing()) { Pause(); m_pMediaPlayer.ShowWindow(SW_HIDE); //Full screen ad m_pAdWindows[0]->MoveWindow(&r); return; } for (size_t k = 1; k < MAX_AD_WINDOWS; k++) { if (m_pAdWindows[k] && m_pAdWindows[k]->IsAdShowing()) { FRect rWnd; long lAdHeight = m_pAdWindows[k]->GetPreferedHeight(); long lAdWidth = m_pAdWindows[k]->GetPreferedWidth(); AdTypes adType = (AdTypes) (k + 1); switch(adType) { case AdHTop: rWnd.SetRect(r.left, r.top, r.right, r.top + lAdHeight); break; case AdHBottom: rWnd.SetRect(r.left, r.bottom - lAdHeight, r.right, r.bottom); break; case AdVRight: rWnd.SetRect(r.right - lAdWidth, r.top, r.right, r.bottom); break; case AdVLeft: rWnd.SetRect(r.left, r.top, r.right - lAdWidth, r.bottom); break; } //TODO: Check for reasonable width / height m_pAdWindows[k]->MoveWindow(&rWnd); if (!m_pAdWindows[k]->SetZPosition()) { //returns TRUE if window is positioned on top of the Z-order //returns FALSE if window z-position is not changed. must resize the video window in this case ::SubtractRect(&r, &r, &rWnd); } } } m_pMediaPlayer.MoveWindow(&r, TRUE); }