프로그래밍/MFC

MFC 기본 클래스

에어버스 2016. 6. 12. 11:30

1. CSimpleApp : public CWinApp

SDK 프로그램의 WinMain()처럼 프레임 윈도우 생성과 메시지 루프를 제공

메시지 루프를 제공하는 역활을 하는 CWinApp::Run()는 내부적으로 자동 호출되며 코드는 나타나지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class CMFCApplication1App : public CWinApp
{
public:
    CMFCApplication1App();
 
 
// 재정의입니다.
public:
    virtual BOOL InitInstance(); // Main윈도우(MainFrame)를 만들고 WM_CREATE 발생시켜 CFrmaeWnd::OnCretae()를 호출하여 프레임윈도우와 뷰를 만들고 메인윈도우를 화면에 보여준다.
    virtual int ExitInstance();
 
// 구현입니다.
    afx_msg void OnAppAbout();
    DECLARE_MESSAGE_MAP() // 메시지 처리
};
 
extern CMFCApplication1App theApp; // 전역변수
 
cs

 2. CMainFrame : public CFrameWnd

프레임윈도우 기능 정의하며, 자신이 생성될때 View도 같이 생성된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class CMainFrame : public CFrameWnd
{
    
protected// serialization에서만 만들어집니다.
    CMainFrame();
    DECLARE_DYNCREATE(CMainFrame)
 
// 특성입니다.
public:
 
// 작업입니다.
public:
 
// 재정의입니다.
public:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs); // WM_CREATE 메시지를받아 OnCreate() 호출 직전에 호출되어 윈도우스타일을 변경할 수 있다.
 
// 구현입니다.
public:
    virtual ~CMainFrame();
#ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
#endif
 
protected:  // 컨트롤 모음이 포함된 멤버입니다.
    CToolBar          m_wndToolBar;
    CStatusBar        m_wndStatusBar;
 
// 생성된 메시지 맵 함수
protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // Frame윈도우와 View도 같이 생성됨
    DECLARE_MESSAGE_MAP()
 
};
 
cs

3. CMFCApplication1View : public CView

마우스와 키보드 입력을 받아 처리
데이터를 화면에 출력

1
2
3
4
5
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
...
cs

뷰를 생성하는 코드는 안보이고 CMainFrame::OnCreate()를 호출하면 CApplication1View::PreCreateWindow() 가 자동 호출된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class CMFCApplication1View : public CView
{
protected// serialization에서만 만들어집니다.
    CMFCApplication1View();
    DECLARE_DYNCREATE(CMFCApplication1View)
 
// 특성입니다.
public:
    CMFCApplication1Doc* GetDocument() const;
 
// 작업입니다.
public:
 
// 재정의입니다.
public:
    virtual void OnDraw(CDC* pDC);  // 이 뷰를 그리기 위해 재정의되었습니다.
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
    virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
    virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
    virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
 
// 구현입니다.
public:
    virtual ~CMFCApplication1View();
#ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
#endif
 
protected:
 
// 생성된 메시지 맵 함수
protected:
    DECLARE_MESSAGE_MAP()
};
 
#ifndef _DEBUG  // MFCApplication1View.cpp의 디버그 버전
inline CMFCApplication1Doc* CMFCApplication1View::GetDocument() const
   { return reinterpret_cast<CMFCApplication1Doc*>(m_pDocument); }
#endif
 
 
cs