Programming/MFC

MFC 구조

koinit 2009. 5. 24. 17:22

1. MFC?

  MFC Microsoft Foundation Classes의 약자로, Windows 응용프로그램 개발에 사용될 수 잇는 Class들의 모음이다.

  MFC Library에 있는 Class들은 C++언어로 작성되었으며, 이미 작성되어 있는 Code(Windows API로 구성된 Code)들을 사용함으로써 프로그래머의 시간절약 시켜줄 뿐 아니라, 또한 응용프로그램을 개발하기 위한 전반적인 틀을 제공한다.

 

2. MFC 기본 구조

 

 

3. MFC 클래스

  1) CObject

- MFC를 구성하는 최상 클래스 및 최초의 객체, MFC 클래스의 원조 클래스이며, 다른

 클래스들의 기본 클래스.

    - CObject 는 실행 시 Run-Time의 자료형 정보, 직렬화, 진단 등 포함한 다양한

     실행시의 특성을 가지고 있다.

- 대부분의 MFC Class CObject 클래스로부터 상속되며, Class 자신의 정보 저장 및

 클래스 정보 전달기능을 가짐.

2) CCmdTaget (Application Architecture)

   

- 메시지를 받고 받은 메시지에 해당하는 모듈을 실행시키고 메시지를 전송하는

 방식을 사용하는 Window Program Message Driven 방식을 사용한다.

- Message Driven 방식이기 때문에 기본적으로 메시지를 받는 클래스가 필요하며,

 이를 사용하기 위해 CObject 로부터 상속을 받아 Message를 처리 한다.

- Message Map 을 관리하고, Message 관련 처리를 해주는 역할을 한다.

    CWinApp

      - 서로 다른 Class들을 합치고 프로그램을 구동 시키며, 프로그램의 시작과 종료를

       담당 한다.

      - 프로그램을 실행 시 Main frame(CMyFrame)을 생성시키며, 무한 Loop 상태로

       있다가, WM_QUIT(종료) 메시지를 만나면 프로그램 종료한다.

    CDocument

      - CDocument클래스는 사용자에 의해서 정의된 문서 클래스들을 위해서 기본적인

       기능 들을 제공한다.

    CFrameWnd 

      - Window 이동크기 조절  Window Frame 관리한다.

      - 또한 메뉴툴바와 상태바의 관리를 이곳에서 수행한다.

    CView 

      - Data Window에 보여주는 일반적인 역할을 한다.

 

3) CFile (File Services)

 

   - 버퍼 없는 바이너리 디스크 I/O 서비스를 제공한다.

   - 파일을 개폐하고 또한 데이터를 파일에 기록할  이전에는 보통 _lopen, _lcreate, _lseek

     함수 등을 사용하였으나,  CFile 클래스는 이 함수를 대신하여 파일을 원활하게 컨트롤

    할 수 있도록 설계된 클래스이다.

    CMemFile : 메모리맵 파일에 대한 엑세스를 제공한다.

    CSharedFile : 공유 메모리 파일을 지원한다.

    OleStreamFile : OLE 구조적 저장방식인 복합파일에서 데이터의 Stream

                      표현한다.

    CMonikerFile

      : 경로 이름이 일반적인 디스크 파일을 구분하는 것과 마찬가지로복합 파일에서

       데이터의 Stream 표현한다.

    CAsyncMonikerFile

      : Data Stream으로부터 비동기적으로 데이터를 Load하는 ActiveX 컨트롤의

       기능을 지원한다.

    CDataPathProperty

      : ActiveX 컨트롤이 컨트롤 Property 데이터를 비동기적으로 Load하도록 허용한다.

    CCachedDataPath

      : ‘PropertyActiveX’ 컨트롤이 컨트롤 Property Data 비동기적으로 Load하고,

       데이터를 RAM Cache하도록 허용한다.

    CSocketFile : TCP/IP Network 접속에서 데이터를 보내고 받는데 사용된다.

    CStdioFile : C런타임 File Stream 비슷한 버퍼있는 디스크 I/O 서비스를 제공한다.

    CGopherFile : Gopher Server로부터 데이터를 전공하는 것을 캡슐화 한다.

    CHttpFile : Web Server로부터 데이터를 전송하는 것을 캡슐화 한다.

    CRecentFileList : 가장 최근에 사용된 (MRU) 파일 리스트를 제어하게 해준다.

 

  4) CWnd (Window Support)

- Windows 관련된 기능, 즉 눈에 보이는 Objcet(객체)를 담당한다.

-  화면에 출력되어 우리의 눈에 보이는 Window라는 객체를 클래스로 구현되었다.

- 300여 개의 멤버 함수를 가지며, Window 크기, 위치, 모양, 상태 등을 제어하기 위한

      함수 100 여개의 멤버 함수를 가진다.

- Message Handler라고 불리는 멤버 함수로, 윈도우에서  발생하는 메시지를 처리하기

 위한 함수가  200 여개 된다.

   

    Ø CWnd 클래스 - Frame Windows

      CFrameWnd : SDI 프레임 윈도우

      CMDIChilfWnd : MDI 자식 윈도우

      CMDIFrameWnd : MDI 프레임 윈도우

      COleIPFrameWnd : TODO

      CSplitterWnd : 탐색기 스타일의 분할 윈도우

 

     Ø CWnd 클래스 - Views Windows

      CView

        - 문서/ 애플리케이션에서 기본적인 View 캡슐화

        - 데이터를 보여주고 윈도우 관리하는 기능

        - 도큐먼트 안에 있는 데이터를 화면에 출력하는 역할을 하는 클래스

      CCtrlView

        - 문서/ 구조를 윈도우즈 공통 컨트롤에 적용한다.

        - 다음  클래스를 위한 기반 클래스로 사용된다.

      CEditView 

        - 문서/ 구조를 Windows 공통 에디트 컨트롤

        텍스트 편집단어 검색치환 그리고 스크롤을 자체적으로 해결한 

        간단한 텍스트 에디터를 만드는데 편리한 클래스.

     CListView : 문서/ 구조를 Windows 공통 리스트 컨트롤

     CRichEditView : 문서/ 구조를 Windows 공통 Rich 컨트롤

     CTreeView : 문서/ 구조를 Windows 공통 트리 컨트롤

     CScrollView : 내장스크롤 기능을 가지는 CView 제공하며, 화면 스크롤도 가능

     CFormView : 다이얼로그 박스와 같이 컨트롤을 가지는 뷰의 기반 클래스

     CDaoRecordView

       컨트롤에서 (Jet) 데이터베이스 레코드 셋 정보를 출력하는 CView 일종

     CRevordView

       컨트롤에 ODBC 데이터베이스 레코드 셋 정보를 출력하는 CView 일종 

 

    Ø CWnd 클래스 - Dialog Boxes Windows

     CDialog : 다이얼로그 박스를 출력하는데 사용되는 기반 클래스

     CCommonDialog : Windows 공통 다이얼로그의 기능

                          다음의 5가지 클래스의 기반 클래스로 사용된다.

     CColorDialog : Windows 공통 색상 선택 다이얼로그 컨트롤

                       색상을 선택하기 위한 표준 다이얼로그 클래스

     CFileDialog : Windows 공통 파일 선택 다이얼로그 컨트롤

        파일을 열거나 저장폴더를 찾아가기 등의 일을 하는 표준 다이얼로그 클래스

     CFindReplaceDialog : 윈도우즈 공통 찾기와 바꾸기 다이얼로그 컨트롤

        문자를 검색지정한 문자열로 치환하는 표준 다이얼로그 클래스

     CFontDialog : 윈도우즈 공통 글꼴 선택 다이얼로그 컨트롤

        폰트를 선택글자 크기와 속성을 지정하는 표준 다이얼로그 클래스

     CPrintDialog : 윈도우즈 공통 인쇄 다이얼로그 컨트롤

        인쇄와 인쇄 설정 다이얼로그 박스를 구현하는 쉬운 방법을 제공

     CPropertyPage : 프로퍼티시트의 단일 페이지를 표현

 

    Ø CWnd 클래스 - Controls

     * CButton : 다이얼로그 박스에서 흔히   있는 체크 박스나 라디오 버튼

     * CBitmapButton : 텍스트가 아니라비트맵 레이블을 가지는 푸쉬 버튼

     * CComboBox : 관련된  다운 리스트를 가지는 에디트 박스

     * CEdit : 텍스트 박스

     * CHeaderCtrl : 텍스트의 컬럼 상단에 위치되고컬럼 타이틀을 가지는 윈도우.

     * CHotKeyCtrl : 윈도우즈 공통 핫키 컨트롤

     * CListBox : 선택 사항의 리스트를 가지는 컨트롤

     * CCheckListBox : 설정이나 취소될  있는 박스를 출력하는 컨트롤

     * CDragListBox : 표준 리스트 박스를 캡슐화하고사용자가 새로운 위치로 

                       드래그하여 리스트 아이템을 재정렬하게 해준다.

     * CListCtrl : 리스트  컨트롤

     * COleControl : ActiveX 컨트롤을 개발하는데 사용되는 기반 클래스

     * CProgressCtrl : 윈도우즈 공통 프로그래스바 컨트롤

     * CRichEditCtrl : 윈도우즈 공통 리치 에디트 컨트롤

     * CScrollBar : 스크롤바의 기능을 제공한다

     * CSliderCtrl : 윈도우즈 공통 슬라이더 컨트롤

     * CSpinButonCtrl : 윈도우즈 공통 스핀 버튼 컨트롤

     * CStatic : 정적 컨트롤 텍스트 스트링박스사각형아이콘비트맵커서를 출력함

     * CStatusBarCtrl : 윈도우즈 공통 상태바 컨트롤

     * CTabCtrl : 윈도우즈 공통  컨트롤

     * CToolBarCtrl : 윈도우즈 공통 툴바 컨트롤

     * CToolTipCtrl : 윈도우즈 공통 툴팁 컨트롤

     * CTreeCtrl : 윈도우즈 공통 트리 컨트롤. 계층적인 형식의 컨트롤

 

5) Graphic

   

      - MFC 클래스 계열 중에 Graphics 포함되는 Class Device contexts

       Graphics devices 클래스로 나뉘어 진다.

      그래픽이나 텍스트를 출력할  있는 Windows

      CDC : Device contexts를 캡슐화하고, contexts를 다루기 위한 멤버 함수

      CClientDC : 윈도우의 클라이언트 영역에 관련된 장치 contexts를 구성

      CMetaFileDC : 윈도우즈 메타 파일에 관련된 장치 contexts를 구성

      CPaintDC

        - WM_PAINT 메시지에만 반응하는 Device contexts 구성

        - 윈도우의 화면 출력에 사용되며주로 OnPaint() 의해 사용

        클래스 호출 시 BeginPaint 실행되고소멸될 때에 EndPaint 실행됨

      CBitmap : Windows Bitmap 캡슐화하고이미지를 다루는 멤버 함수를 제공

      CBrush : 윈도우즈 GDI 브러시를 캡슐화

      CFont : 윈도우즈 GDI 글꼴을 캡슐화

      Cpalette : 윈도우즈 GDI 색상 팔레트를 캡슐화.

      CPen : 윈도우즈 GDI 펜을 캡슐화

      CRgn : 윈도우즈 GDI 영역(region) 캡슐화

 

6) Database Support

  

- MFC ODBC 마이크로소프트젯(Jet)의 두 가지 형태의 Database 지원

- Database Access할 시 호출 되는 Class 

    CDatabase : ODBC 데이터베이스에 대한 접속을 클래스

    CRecordset : ODBC 기반 레코드셋을 클래스

    CLongBinary

       : ODBC 데이터베이스 내에서 이미지와 같은 Binary Object 다루는 클래스

    CDaoDatabase : 마이크로소프트 (액세스데이터베이스에 대한 접속 클래스

    CDaoQueryDef :  질의 정의 클래스

    CDaoRecordset :  레코드셋을 표현 클래스

    CDaoTableDef :  테이블 정의를 표현 클래스

    CDaoWorkspace :  워크스페이스를 표현 클래스

 

7) Exceptions

  

    - 치명적인 에러 발생 시에 컴퓨터가 멈추는 일을 막는다.

 

     CException : 여러 가지 예외 처리들에 대한 기본 클래스

     CArchiveException : 데이터 기록에 대한 예외 처리 클래스

     CFileException : 파일에 관련된 예외 처리 클래스

     CMemoryException : 메모리 고장에 관한 예외 처리 클래스

     CNotSupportedException 

        지원되지 않는 특성을 호출하였을  발생하는 예외처리

     CResourceException

        : 윈도우 리소스를 메모리에 로딩 하는  실패할 경우 예외처리

     CUserException

       : 사용자가 정의할  있는 클래스.

       예외 처리에 들어가기 전에 문제가 무엇인지를 Windows에 정의해야 함.

 

  8) 기타

   

    CMenu : 메뉴 처리 클래스

    CAsyncSocket : 비동기 Socket 통신 처리 클래스

    CSocket : 동기 Socket 통신 처리 클래스