Четверг, Сентябрь 24, 2020

CDocument4

#include<afxwin.h>
#include<afxext.h>
#include"resource.h"

class CMyDoc:public CDocument
{
protected:
    CMyDoc();
    CString m_csDate;
    DECLARE_DYNCREATE(CMyDoc)
public:
    CString GetDate();
    void SetString(CString);
    void OnAbout();
private:
    DECLARE_MESSAGE_MAP();
};

IMPLEMENT_DYNCREATE(CMyDoc,CDocument)
CMyDoc::CMyDoc()
{
    m_csDate="Данные";
}
CString CMyDoc::GetDate()
{
    return m_csDate;
}
void CMyDoc::OnAbout()
{
    SetString("Понимаем как работает CDocument");
    UpdateAllViews(NULL);
}
void CMyDoc::SetString(CString s)
{
    m_csDate=s;
}
BEGIN_MESSAGE_MAP(CMyDoc,CDocument)
    ON_COMMAND(ID_HELP_ABOUT,OnAbout)
    END_MESSAGE_MAP()
//////////////////////////////////////////////////
class CMyView:public CView
{
protected:
    CMyView();
    CMyDoc* GetDocument();
    DECLARE_DYNCREATE(CMyView)
public:
    virtual void OnDraw(CDC* pDC);
};
void CMyView::OnDraw(CDC* pDC)
{
    CMyDoc* pDoc=GetDocument();
    pDC->TextOutA(0,0,pDoc->GetDate());
}
IMPLEMENT_DYNCREATE(CMyView,CView)
CMyView::CMyView()
{
}
CMyDoc* CMyView::GetDocument()
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
    return (CMyDoc*)m_pDocument;
}
///////////////////////////////////////////////////////
class CNewView:public CView
{
protected:
    CNewView();
    DECLARE_DYNCREATE(CNewView)
public:
    void OnDraw(CDC *pDC);
    CMyDoc* GetDocument();
};
CMyDoc* CNewView::GetDocument()
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
    return (CMyDoc*)m_pDocument;
}
IMPLEMENT_DYNCREATE(CNewView,CView)
CNewView::CNewView()
{
}
void CNewView::OnDraw(CDC *pDC)
{
    CMyDoc* pDoc=GetDocument();
    pDC->SetTextColor(RGB(255,0,0));
    pDC->TextOutA(0,0,pDoc->GetDate());
}
////////////////////////////////////////////////
class CMainFrame:public CFrameWnd
{
protected:
    CMainFrame();
    DECLARE_DYNCREATE(CMainFrame)
public:
    virtual BOOL OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext ); // создать клиента
    CSplitterWnd m_wndSplitter;                              // разделитель
};
IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)
CMainFrame::CMainFrame()
{

}
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext )
{
    ASSERT(m_wndSplitter.CreateStatic(this,1,2));
    ASSERT(m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyView),
        CSize(500,50),pContext));
    ASSERT(m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CNewView),
        CSize(100,50),pContext));
    SetActiveView((CView*)m_wndSplitter.GetPane(0,1));
    return TRUE;
}
/////////////////////////////////////////////////

class CMyApp:public CWinApp
{
public:
    CMyApp();
    virtual BOOL InitInstance();
};
BOOL CMyApp::InitInstance()
{
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate=new CSingleDocTemplate(
        IDR_MENU1,
        RUNTIME_CLASS(CMyDoc),
        RUNTIME_CLASS(CMainFrame),
        RUNTIME_CLASS(CMyView));
    AddDocTemplate(pDocTemplate);
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    if(!ProcessShellCommand(cmdInfo))
        return FALSE;
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}
CMyApp::CMyApp()
{
}
CMyApp theApp;



НАЗАД                                                                         ДАЛЬШЕ


Back to Top