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

📄 ex22c.cpp

📁 vc++技术内幕范例
💻 CPP
字号:
#include "stdafx.h"
#include "ex22c.h"

CEx22cApp NEAR theApp; // the one and only CEx22cApp object

BOOL CEx22cApp::InitInstance()
{
    m_pMainWnd = new CMainFrame();
    m_pMainWnd->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();
    new CChildFrame();
    return TRUE;
}

/////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
    ON_WM_CLOSE()
    ON_WM_QUERYENDSESSION()
    ON_COMMAND(ID_FILE_NEW, OnFileNew)
    ON_COMMAND(ID_WINDOW_CLOSE_ALL, OnWindowCloseAll)
    ON_UPDATE_COMMAND_UI(ID_WINDOW_CLOSE_ALL, OnUpdateWindowCloseAll)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////
CMainFrame::CMainFrame()
{
    Create(NULL, "EX22C Application",
           WS_OVERLAPPEDWINDOW,
           rectDefault, NULL,
           MAKEINTRESOURCE(IDR_MAINFRAME));
}

/////////////////////////////////////////////////////////////////////////
void CMainFrame::OnClose()
{
    if (CloseAllChildWindows()) {
        CMDIFrameWnd::OnClose();
    }
}

/////////////////////////////////////////////////////////////////////////
BOOL CMainFrame::OnQueryEndSession()
{
    return CloseAllChildWindows();
}

/////////////////////////////////////////////////////////////////////////
void CMainFrame::OnFileNew()
{
    BOOL bMaximized = FALSE;
    // creates a new child window, maximized if active child is maximized
    CChildFrame* pActiveChild = (CChildFrame*) MDIGetActive(&bMaximized);
    new CChildFrame(bMaximized);
}

/////////////////////////////////////////////////////////////////////////
void CMainFrame::OnWindowCloseAll()
{
    CloseAllChildWindows();
}

/////////////////////////////////////////////////////////////////////////
void CMainFrame::OnUpdateWindowCloseAll(CCmdUI* pCmdUI)
{
    pCmdUI->Enable(MDIGetActive() != NULL);
}

/////////////////////////////////////////////////////////////////////////
BOOL CMainFrame::CloseAllChildWindows()
{
    // returns TRUE if all child windows permit closure
    CChildFrame* pChild;
    CChildFrame* pPrevChild = NULL;
    while ((pChild = (CChildFrame*) MDIGetActive()) != NULL) {
        if (pChild == pPrevChild)
            return FALSE; // closure not permitted
        pPrevChild = pChild;
        pChild->SendMessage(WM_CLOSE);
    }
    return TRUE;
}

/////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
    //{{AFX_MSG_MAP(CChildFrame)
    ON_WM_PAINT()
    ON_WM_CLOSE()
    ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

int NEAR CChildFrame::nChild = 1; // static

/////////////////////////////////////////////////////////////////////////
CChildFrame::CChildFrame(BOOL bMaximized /*= FALSE*/)
{
    char szTitle[30];
    wsprintf(szTitle, "EX22C Child Window %d", nChild++);
    CMainFrame* pFrameWnd = (CMainFrame*) AfxGetApp()->m_pMainWnd;
    Create(NULL, szTitle,
           WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW |
           (bMaximized ? WS_MAXIMIZE : 0),
           rectDefault, pFrameWnd);
}

/////////////////////////////////////////////////////////////////////////
void CChildFrame::OnPaint()
{
    CPaintDC dc(this);
    dc.TextOut(0, 0, "Hello, world!");
}

/////////////////////////////////////////////////////////////////////////
void CChildFrame::OnClose()
{
    if(AfxMessageBox("OK to close window?", MB_YESNO) == IDYES) { 
        CMDIChildWnd::OnClose();
    }
}

/////////////////////////////////////////////////////////////////////////
void CChildFrame::OnFileClose()
{
    SendMessage(WM_CLOSE);
}

⌨️ 快捷键说明

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