全屏
1 2 CMDIChildWnd* pChild=MDIGetActive(); 3 if(!pChild) return; 4 m_bToolBarWasVisible=(m_wndToolBar.IsWindowVisible()!=0); 5 m_wndToolBar.ShowWindow(SW_HIDE);//隐藏工具栏 6 m_bStatusBarWasVisible=(m_wndStatusBar.IsWindowVisible()!=0); 7 m_wndStatusBar.ShowWindow(SW_HIDE);//隐藏状态栏 8 9 // first create the new toolbar 10 // this will contain the full-screen off button 11 m_pwndFullScreenBar=new CToolBar; 12 m_pwndFullScreenBar->Create(this); 13 m_pwndFullScreenBar->LoadToolBar(IDR_FULLSCREEN);//显示退出全屏工具栏 14 m_pwndFullScreenBar->SetBarStyle(m_pwndFullScreenBar->GetBarStyle() | 15 CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); 16 // to look better: 17 m_pwndFullScreenBar->ModifyStyle(0, TBSTYLE_FLAT); 18 m_pwndFullScreenBar->EnableDocking(0); 19 20 // place the full-screen off button somewhere: 21 CPoint pt(300,200); 22 FloatControlBar(m_pwndFullScreenBar,pt); 23 24 // now save the old positions of the main and child windows 25 GetWindowRect(&m_mainRect); 26 27 // remove the caption of the mainWnd: 28 LONG style=::GetWindowLong(m_hWnd,GWL_STYLE); 29 style&=~WS_CAPTION; 30 ::SetWindowLong(m_hWnd,GWL_STYLE,style); 31 int screenx=GetSystemMetrics(SM_CXSCREEN); 32 int screeny=GetSystemMetrics(SM_CYSCREEN); 33 34 // resize: 35 SetWindowPos(NULL,0,0,screenx,screeny,SWP_NOZORDER); 36 //SetWindowPos(NULL,-5,-5,80,80,SWP_NOZORDER); 37 style=::GetWindowLong(pChild->m_hWnd,GWL_STYLE); 38 m_bChildMax=(style & WS_MAXIMIZE)?true:false; 39 // note here: m_bMainMax is not needed since m_hWnd only 40 // changed its caption 41 ///*************** 42 43 //Save the Original Menu and set menu to NULL 44 ASSERT(m_OrgMenu.GetSafeHmenu()==NULL); 45 CMenu* pOldMenu=GetMenu(); 46 m_OrgMenu.Attach(pOldMenu->Detach()); 47 SetMenu((CMenu*)NULL); 48 49 //************ 50 // and maximize the child window 51 // it will remove its caption, too. 52 //pChild-> 53 this->ShowWindow (SW_SHOWMAXIMIZED); 54 style=::GetWindowLong(pChild->m_hWnd,GWL_STYLE);//获得窗口风格 55 style&=~WS_CAPTION; 56 ::SetWindowLong(pChild->m_hWnd,GWL_STYLE,style); 57 pChild->ShowWindow(SW_SHOWMAXIMIZED); 58 59 //RecalcLayout(); 60 61 62
退出全屏
1ASSERT(m_OrgMenu.GetSafeHmenu()!=NULL); 2 SetMenu(&m_OrgMenu); 3 m_OrgMenu.Detach(); 4 5 // You can use SaveBarState() in OnClose(), 6 // so remove the newly added toolbar entirely 7 // in order SaveBarState() not 8 // to save its state. That is why I used dynamic 9 // allocation 10 delete m_pwndFullScreenBar; 11 LONG style=::GetWindowLong(m_hWnd,GWL_STYLE); 12 style|=WS_CAPTION; 13 ::SetWindowLong(m_hWnd,GWL_STYLE,style); 14 if(m_bToolBarWasVisible) 15 m_wndToolBar.ShowWindow(SW_SHOW); 16 if(m_bStatusBarWasVisible) 17 m_wndStatusBar.ShowWindow(SW_SHOW); 18 MoveWindow(&m_mainRect); 19 RecalcLayout(); 20 CMDIChildWnd* pChild=MDIGetActive(); 21 22 style=::GetWindowLong(pChild->m_hWnd,GWL_STYLE); 23 style|=WS_CAPTION; 24 ::SetWindowLong(pChild->m_hWnd,GWL_STYLE,style); 25 // pchild can be NULL if the USER closed all the 26 // childs during Full Screen Mode: 27 if(pChild){ 28 if(m_bChildMax) 29 MDIMaximize(pChild); 30 else MDIRestore(pChild); 31 }
|