API使指定窗口全屏/恢复全屏

BOOL FullScreenViewCtrl(HWND m_hWnd, //想要全屏的窗口句柄
                        BOOL bFullScreen) //TURE进入全屏 FALSE退出全屏
{
  static HWND pParentWndSave = NULL; //父窗口句柄
  static DWORD dwWindowStyleSave = 0; //窗口风格
  static RECT rcWndRectSave = {0, 0, 0, 0}; //窗口位置
  static BOOL bEnterFullView = FALSE;  //进入全屏?

  _ASSERT( IsWindow(m_hWnd) );

  if(bFullScreen)
  {
    if(!bEnterFullView)//非全屏模式
    {
      dwWindowStyleSave = GetWindowLong(m_hWnd, GWL_STYLE); //保存窗口风格
      GetWindowRect(m_hWnd, &rcWndRectSave); //保存窗口位置
      pParentWndSave = SetParent(m_hWnd, NULL); //保存父窗口句柄/设置父窗口
      SetWindowLong(m_hWnd, GWL_STYLE, dwWindowStyleSave & (~WS_CHILD) | WS_POPUP);//使窗口具有Popup风格
      SetWindowPos(m_hWnd, HWND_TOP, 
        0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 
        SWP_DRAWFRAME | SWP_DEFERERASE | SWP_FRAMECHANGED); //修改窗口置全屏
      bEnterFullView = TRUE; //进入全屏模式
    }
  }
  else
  {
    if(bEnterFullView) //是全屏模式
    {
      SetWindowLong(m_hWnd, GWL_STYLE, dwWindowStyleSave);//恢复窗口风格
      SetParent(m_hWnd, pParentWndSave); //恢复父窗口句柄
      POINT ptLT = {rcWndRectSave.left, rcWndRectSave.top};
      ScreenToClient(m_hWnd, &ptLT);
      MoveWindow(m_hWnd, ptLT.x, ptLT.y, 
        rcWndRectSave.right-rcWndRectSave.left, rcWndRectSave.bottom-rcWndRectSave.top,
        TRUE); //恢复原始位置
      bEnterFullView = FALSE; //退出全屏模式
    }
  }

  return bEnterFullView;//返回是否是全屏?
}

你可能感兴趣的:(API使指定窗口全屏/恢复全屏)