📄 childfrm.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 + -