?? 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 + -