⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 childfrm.cpp

📁 全屏显示
💻 CPP
字号:
#include "stdafx.h"
#include "FullView.h"
#include "MainFrm.h"
#include "ChildFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)

BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
	//{{AFX_MSG_MAP(CChildFrame)
	ON_WM_GETMINMAXINFO()
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CChildFrame::CChildFrame()
{
}

CChildFrame::~CChildFrame()
{
}

void CChildFrame::ActivateFrame(int nCmdShow) 
{
	CMDIChildWnd::ActivateFrame(nCmdShow);

	//计算全屏状态下子窗口的WindowPlacement;因为主窗口进入全屏状态时可能没有子窗口,无法完成计算;
	CMainFrame * pMainFrame=(CMainFrame *)AfxGetMainWnd();
	if (pMainFrame->NeedToCalcWndplChild() && pMainFrame->IsFullScreenMode())
		pMainFrame->CalcFullScreenWndplChild();
}

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	//将新窗口的WindowPlacement加入到映射中
	WINDOWPLACEMENT	*pWndpl=new WINDOWPLACEMENT;
	GetWindowPlacement(pWndpl);
	CMainFrame * pMainFrame=(CMainFrame *)AfxGetMainWnd();
	pMainFrame->m_mapHWndToWndpl[GetSafeHwnd()]=pWndpl;

	return 0;
}

void CChildFrame::OnDestroy() 
{
	//清理WindowPlacement映射中的内容
	CMainFrame * pMainFrame=(CMainFrame *)AfxGetMainWnd();
	WINDOWPLACEMENT	*pWndpl=pMainFrame->m_mapHWndToWndpl[GetSafeHwnd()];
	delete pWndpl;
	pMainFrame->m_mapHWndToWndpl.RemoveKey(GetSafeHwnd());

	CMDIChildWnd::OnDestroy();
}

void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
	CMainFrame* pMainFrame = (CMainFrame*) AfxGetMainWnd();

	if(pMainFrame->IsFullScreenMode() && pMainFrame->GetFullScreenChildsMMI(lpMMI))
		;//DoNothing
	else
		CMDIChildWnd::OnGetMinMaxInfo(lpMMI);
}

void CChildFrame::OnSize(UINT nType, int cx, int cy) 
{
	CMDIChildWnd::OnSize(nType, cx, cy);
	CMainFrame * pMainFrame=(CMainFrame *)AfxGetMainWnd();
	WINDOWPLACEMENT * pWndpl;
	BOOL bIsNewFrame=!pMainFrame->m_mapHWndToWndpl.Lookup(GetSafeHwnd(),pWndpl);
	if (pMainFrame->IsFullScreenMode() && nType==SIZE_RESTORED && !bIsNewFrame)
	{
		//使在全屏状态下对子窗口重排、平铺或直接改变窗口大小的操作在退出全屏状态后仍有效;
		GetWindowPlacement(pWndpl);
		pMainFrame->m_mapHWndToWndpl[GetSafeHwnd()]=pWndpl;
	}
}

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) 
{
	//在子窗口中加入滚动条;
	CMainFrame * pMainFrame=(CMainFrame * )AfxGetMainWnd();
	if (pMainFrame->ShowScrollBar())
		cs.style|=WS_VSCROLL|WS_HSCROLL;	
	return CMDIChildWnd::PreCreateWindow(cs);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -