www.pudn.com > Screensaver.rar > MainFrm.cpp


// MainFrm.cpp : implementation of the CMainFrame class 
// 
 
#include "stdafx.h" 
#include "SnowWorld.h" 
 
#include "MainFrm.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame 
 
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(CMainFrame) 
	ON_WM_CREATE() 
	ON_WM_SETFOCUS() 
	ON_WM_GETMINMAXINFO() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame construction/destruction 
 
CMainFrame::CMainFrame() 
{ 
	// TODO: add member initialization code here 
	//m_OldWndPlacement;	//用来保存原窗口位置 
	m_bFullScreen=0;					//全屏显示标志 
	//CRect m_FullScreenRect;				//表示全屏显示时的窗口位置 
} 
 
CMainFrame::~CMainFrame() 
{ 
} 
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	// create a view to occupy the client area of the frame 
	if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, 
		CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) 
	{ 
		TRACE0("Failed to create view window\n"); 
		return -1; 
	} 
 
	return 0; 
} 
 
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	if ( cs.hMenu != NULL ) 
	{ 
		DestroyMenu( cs.hMenu ); 
		cs.hMenu = NULL; 
	} 
 
	if( !CFrameWnd::PreCreateWindow(cs) ) 
		return FALSE; 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	cs.dwExStyle &= ~WS_EX_CLIENTEDGE; 
	cs.lpszClass = AfxRegisterWndClass(0); 
	return TRUE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame diagnostics 
 
#ifdef _DEBUG 
void CMainFrame::AssertValid() const 
{ 
	CFrameWnd::AssertValid(); 
} 
 
void CMainFrame::Dump(CDumpContext& dc) const 
{ 
	CFrameWnd::Dump(dc); 
} 
 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame message handlers 
void CMainFrame::OnSetFocus(CWnd* pOldWnd) 
{ 
	UNREFERENCED_PARAMETER( pOldWnd ); 
 
	// forward focus to the view window 
	m_wndView.SetFocus(); 
} 
 
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{ 
	// let the view have first crack at the command 
	if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) 
		return TRUE; 
 
	// otherwise, do default handling 
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); 
} 
 
 
void CMainFrame::FullScreen(void)  
{	 
	GetWindowPlacement(&m_OldWndPlacement);  
	 
	CRect WindowRect;  
	GetWindowRect(&WindowRect);	 
	//得到的是View客户区的绝对坐标 
	 
	CRect ClientRect;               
	RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);  
	//得到的是View的逻辑坐标 
	ClientToScreen(&ClientRect); 
	//转成设备坐标 
	 
	// 获取屏幕的分辨率  
	int nFullWidth=GetSystemMetrics(SM_CXSCREEN);  
	int nFullHeight=GetSystemMetrics(SM_CYSCREEN);  
	 
	// 将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区域 
	// 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的客户区位置间的差值, 就得到全屏显示的窗口位置  
	m_FullScreenRect.left=WindowRect.left-ClientRect.left;  
	m_FullScreenRect.top=WindowRect.top-ClientRect.top;  
	m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth; 
	m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight;  
	 
	m_bFullScreen=TRUE; // 设置全屏显示标志为 TRUE  
	// 进入全屏显示状态  
	WINDOWPLACEMENT wndpl; 
	 
	wndpl.length=sizeof(WINDOWPLACEMENT);  
	wndpl.flags=0;  
	wndpl.showCmd=SW_SHOWNORMAL;  
	wndpl.rcNormalPosition=m_FullScreenRect;  
	SetWindowPlacement(&wndpl); 
} 
 
void CMainFrame::EndFullScreen(void) 
{ 
	if(m_bFullScreen) 
	{ 
		// 退出全屏显示, 恢复原窗口显示 
		ShowWindow(SW_HIDE); 
		SetWindowPlacement(&m_OldWndPlacement); 
		m_bFullScreen=FALSE; 
	}  
} 
 
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)  
{ 
    // TODO: Add your message handler code here and/or call default 
    CRect rc(0,0, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)); 
    lpMMI->ptMaxSize = CPoint(rc.Width()+100,rc.Height()+160);//设定框架的最大尺寸 
    lpMMI->ptMaxTrackSize = CPoint(rc.Width()+100,rc.Height()+160); 
	CFrameWnd::OnGetMinMaxInfo(lpMMI); 
}