MFC MDI 전체 화면 구현

1. MainFrame에서.h의 CmainFrame 클래스에 데이터 멤버 및 멤버 함수를 추가합니다.
class CMainFrame : public CMDIFrameWnd
{
    ......
//데이터 멤버
   RECT m_rcOldWnd;//이전 창 위치 및 크기
 BOOL m_bFullScreen;//전체 화면 표시 플래그
//구성원 함수
   void EnterFullScreen();//전체 화면 void QuitFullScreen(),//전체 화면 종료
}
 
2.MainFrame에서.cpp에서 함수 구현:
먼저 구조 함수에서 m 초기화bFullScreen:
CMainFrame::CMainFrame():m_bFullScreen( false){...}
PreCreate Window () 함수와 Oncreate () 함수는 수정하지 않고 기본값으로 사용할 수 있습니다.
그 다음에 관건적인 부분: 전체 화면을 실현하고 전체 화면을 종료한다.
//    
void CMainFrame::EnterFullScreen()
{
	//         ,    
	if(m_bFullScreen)
	{
		return ;
	}
	//         
	GetWindowRect(&m_rcOldWnd); 

	//     ,    ,    
	m_wndStatusBar.ShowWindow( SW_HIDE); 
	m_wndToolBar.ShowWindow( SW_HIDE); 

	SetMenu(NULL);//      

	ModifyStyle(0 ,WS_POPUP);
	ModifyStyle(WS_CAPTION, 0);
	ModifyStyle(WS_BORDER,0);
	ModifyStyle(WS_THICKFRAME,0);

	//         ,
	MoveWindow(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));

	MDIGetActive()->ShowWindow(SW_SHOWMAXIMIZED);//           

	m_bFullScreen= true;
}

//    
void CMainFrame::QuitFullScreen()
{
	//        ,    
	if(!m_bFullScreen)
	{
		return ;
	}

	m_bFullScreen = false;

	//     ,     
	m_wndStatusBar.ShowWindow(SW_SHOW); 
	m_wndToolBar.ShowWindow(SW_SHOW);


	//      
	MoveWindow(&m_rcOldWnd);  

	ModifyStyle(0, WS_CAPTION);
	ModifyStyle(0, WS_BORDER);
	ModifyStyle(0, WS_THICKFRAME);

	//  ,     WS_MAXIMIZE,               
	ModifyStyle(0, WS_OVERLAPPED |  FWS_ADDTOTITLE |WS_MINIMIZEBOX | WS_MAXIMIZEBOX /* |WS_MAXIMIZE*/);

	//      
	SetMenu(CMenu::FromHandle(::LoadMenu( ::AfxGetApp()->m_hInstance ,MAKEINTRESOURCE( IDR_MDITYPE))));

	//       
	MDIGetActive()->ModifyStyle( 0, WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
		| FWS_ADDTOTITLE /*| WS_THICKFRAME*/ | WS_MINIMIZEBOX | WS_MAXIMIZEBOX /*| WS_MAXIMIZE*/);

	MDIGetActive()->ShowWindow(SW_SHOWNORMAL);//              

	ShowWindow(SW_SHOWNORMAL);//        
}

3.
이어서 하위 창의 ChildFrame.cpp에서 창 속성을 설정하려면:
OOL CChild Frame::PreCreate Window(CREATESTRUCT & cs) {//TODO: 여기서 CREATESTRUCT cs를 수정하여 창 클래스나 스타일if(! CMDIChildWnd::PreCreate Window(cs) return FALSE를 수정합니다.
//전체 화면에 WS가 있어서는 안 된다는 점에 유의하라THICKFRAME   cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU         | FWS_ADDTOTITLE/*| WS_THICKFRAME*/| WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
 
 return TRUE; }
4. 현재 전체 화면의 기능이 완성되었으니 호출만 하면 됩니다. MDIView에서 사용할 수 있습니다.cpp에서 키 호출(F1 전체 화면, F2 전체 화면 종료):
BOOL CMDIView: PreTranslateMessage(MSG* pMsg) {if(pMsg->wParam==VK F1)//전체 화면에 들어가기
  (( CMainFrame*)::AfxGetMainWnd())->EnterFullScreen();//주 프레임워크의 함수 호출
     return TRUE; } if(pMsg->wParam==VK F2)//전체 화면 종료
  (( CMainFrame*)::AfxGetMainWnd())->QuitFullScreen();//주 프레임워크의 함수 호출
     return TRUE;  }
 return CView::PreTranslateMessage( pMsg); }
 
5. 요약:
전체 화면 효과를 실현하려면 제목, 메뉴, 도구, 상태 표시줄 등을 숨기고 하위 창을 최대화하면 됩니다.본문에는 스크롤 바를 고려하지 않은 등 일부 결함이 있다.

좋은 웹페이지 즐겨찾기