C++/summary

MFC 기본설명 및 소스

gandus 2010. 11. 17. 09:54

① 응용 프로그램 클래스 정의

② 메인(=프레임) 윈도우 클래스 정의

③ 응용 프로그램 객체 선언

④ 메시지 맵 선언





// mfc는메시지핸들러함수로분리되어있다.

// c++은하나로묶여있지만.. 

#include <afxwin.h>

 

 

 

// 응용프로그램클래스를선언한다.

// WinMain 역할을담당한다.

// CWinApp 상속받아 사용해야 한다.

class
CHelloApp : public CWinApp

{

public:

        virtual BOOL InitInstance();

        // 재정의된함수
        // 초기화 하는 함수이다. 반드시 재정의 해야한다.

 // 반드시 해야하는 함수는 virtual이 붙어 있다.

};

 

 

 

// 메인윈도우클래스를선언한다.

// 윈도우에대한생성, 메시지처리등을묶어서가지고있음

// public CFrameWnd 을 상속받아사용한다.
 

// c++에서프로시저역활을담당한다.

// sdk는스위치로나눴는데여기서는????

 

// 대시에매시지맵이존재한다.

class CMainFrame : public CFrameWnd

{

public:

        CMainFrame();

 

protected:

        afx_msg void OnPaint();

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        // 메시지핸들러함수

 

         // 이것역시매크로로메시지맵을사용하기위해서...

        DECLARE_MESSAGE_MAP()

}; 

// 응용프로그램객체를선언한다.

// mfc예제는객체가하나가있어야사용이된다.

 

 

// 가장먼저시작.  응용프로그램의 객체이다.

//  ******* 여기서부터프로그램이시작이되는것이다.******

// 이거는힙? 스택??

CHelloApp theApp;

 

 

// 2번째로실해된다.

// 응용프로그램클래스를정의한다.

// winmain에서윈도우생성, 화면에출력하는것만정의했다.

// 나머지는??

 

// 출력전에윈도우를정의해야하는데보이지않는다??

// - > cWinApp 안에서물려받은것을그대로사용한다.

 

// 메시지루프는어디에???

// 이것도역시cWinApp안에서물려받는다.

 

 

 

// 모든윈도우프로그램은api함수를사용해야한다.

BOOL CHelloApp::InitInstance()

{

         //동적으로 생성된다.
       
//
동적할당되면힙에저장된다.

        m_pMainWnd = new CMainFrame;   //  -> create하고 다음으로


       
m_pMainWnd->ShowWindow(m_nCmdShow);

        // 이것은전역함수가아니라,cWinmfc 클래스의멤버함수이다.

        // 내부적으로는api함수를호출한다.

        // 본래showwindow2개지만, 현재는윈도우핸들이없다

        // 대신에윈도우를가리키는윈도우의객체가있다.

 

        return TRUE;

}

 

 

 

// 메인윈도우클래스를정의한다.

// 이제생성자로넘어간다.

// createwindow 와대응된다.

CMainFrame::CMainFrame()

{

        Create(NULL, "HelloMFC Application");

        // 이것역시멤버함수이다.

        // 역시내부적으로는api를사용, 사용하기쉽게하기위해서.

        // 원래인자가11개인데-> 2개만

        // 기본인자, 디폴드함수로있어서...   

}

 

 


// 화면을 출력하기 위함이다. 
// sdk보다 간단하다.  객체를 사용해 멤버함수로 호출한다.
// 반드시 DC 가 필요하다. sdk에서는 begin paint end... 여기선 객체로
// 출력에 관한 함수를 클래스에 묶어두어 사용하기편하다.

void CMainFrame::OnPaint()

{

        char *msg = "Hello, MFC";

        CPaintDC dc(this);

        dc.TextOut(100, 100, msg, lstrlen(msg));

}

 

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

// mfc 멤버함수이다.  api 함수보다 심플하다.

        MessageBox("마우스를클릭했습니다.", "마우스메시지");

}

 

 

// 이것은매크로로되어서전처리기가처리한다.

// 그래서개념만파악하면알아서

// 메시지맵을선언한다.

 

// 메시지핸들러가2개니깐2개밖에없다

// 더추가할려면더추가해야한다.

// DECLARE_MESSAGE_MAP() 이것을통해서사용이가능하다.

 

// 메시지맵이있어야지메시지를처리할수있다.
// CMainFrame - 메인 프레임의 메시지 핸들러이다.
// 윈도우마다 메시지 맵을 따로 정의해야한다.

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
      
       // 매크로이다, 코드를 간략하기 위함이다.

        ON_WM_PAINT()

        ON_WM_LBUTTONDOWN()


END_MESSAGE_MAP()