一种全屏显示子窗口的方法:
1:基本想法:
  让子窗口脱离父窗口。用SetWindowPos重新设置窗口的大小。
  还原时重新设置子窗口的父窗口。重新设置窗口的大小
 主要代码如下:
//m_hWnd为子窗口的句柄
     static BOOL m_FullScreen = true;
      HWND hwndParentSave;
                //获得整个屏幕的大小
  int cx = ::GetSystemMetrics(SM_CXSCREEN);
  int cy = ::GetSystemMetrics(SM_CYSCREEN);
               
                //获得子窗口的风格
  long style = ::GetWindowLong(m_hWnd,GWL_STYLE);

                //获得子窗口的父窗口
  HWND hwndparent = ::GetParent(m_hWnd);
             
              //判断其父窗口是否存在。
  if(!::IsWindow(hwndparent))
  {
                  //不存在表示已经全屏,重新设置子窗口的风格(主要是加入了WS_CHILD风格
    ::SetWindowLong(m_hWnd,GWL_STYLE,(style | WS_CHILD));
      //重新设置其父窗口(刚才保存的父窗口 
                   ::SetParent(m_hWnd,hwndParentSave);
  }
  else
  {     //父窗口存在,去掉其子窗口的风格
   style &= ~WS_CHILD;
                     //重新设置要脱离父窗口的子窗口的风格
   ::SetWindowLong(m_hWnd, GWL_STYLE, style);
                     //重新设置子窗口的父窗口为NULL(脱离父窗口)
   ::SetParent(m_hWnd,NULL);
                     //把父窗口保存起来
                  hwndParentSave =hwndparent ;
                     把子窗口的大小保存起来
   ::GetWindowRect(m_hWnd,&rc);    
  }
  if(m_FullScreen)
  { 
                     //全屏设置大小 
   ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,cx,cy,0);
   m_FullScreen = false; 
  }
  else
  {
         //还原重新设置大小
   ::MoveWindow(m_hWnd,rc.left,rc.top,rc.Width(),rc.Height(),0);
   m_FullScreen = true;
  }


评论

该日志第一篇评论

发表评论

评论也有版权!