MFC CObject Program Demo

MFC CObject Program (CObject를 상속받은 CPoint3D클래스의 사용예제)
MFC Application Program 방식으로 프로그램을 생성
-CPoint3D 클래스는 실시간 클래스 정보 & 동적 객체 생성을 지원
1081925782.zip
-CChildView 클래스는 RUNTIME_CLASS(MYCLASS)->CreateObject()로 동적객체생성과
IsKindOf(RUNTIME_CLASS(MYCLASS))를 통해 실시간 클래스 정보 테스트
1382672211.zip

MFC Application Program

.NET2005


  • MFC App 프로젝트 새로 만들기

    • 메뉴에서 File->New->Project->Visual C++ 템플릿->MFC->MFC Application를 선택한 후 “프로젝트 이름(예를 들어, SimpleMFC)”을 적고 확인버튼을 누른다.
    • SDI, Use MFC in a Shared DLL, 한국어 선택하고 Next버튼을 누른다.
    • 데이터베이스는 None으로 선택하고 Next버튼을 누른다.
    • 사용자인터페이스 확인하고 Next버튼을 누른다.
    • Advanced Features에서 ActiveX를 선택해제한다.
    • 그리고, Generated Classes를 확인하고 Finish버튼을 누른다.

    사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지
     


  • 코드 추가

    • CChildView::OnPaint에 출력함수(예: “dc.TextOut(100, 100, CString(“안녕하세요”))을 추가한다.

    사용자 삽입 이미지


  • 빌드(F7)와 실행(F5 or CTRL+F5)

    사용자 삽입 이미지


  • ClassView에서 CChildView 클래스를 선택한후 Properties Window를 호출하여 Messages 아이콘을 클릭하여 메시지 리스트에서 원하는 메시지를 선택하여 함수를 추가

  • 사용자 삽입 이미지


  • WM_KEYDOWN을 선택하여, OnKeyDown 함수를 추가

  • 사용자 삽입 이미지


  • WM_LBUTTONDOWN을 선택하여, OnLButtonDown 함수를 추가

  • 사용자 삽입 이미지


  • OnKeyDown함수와 OnLButtonDown함수 안에 코드를 추가

  • 사용자 삽입 이미지
     


  • 빌드(F7)와 실행(F5 or CTRL+F5)

  • 사용자 삽입 이미지사용자 삽입 이미지



    실습숙제2 재공지

    실습숙제2 재공지
    실습숙제2에서 2_CPerson.zip을 새로 다운로드 받아서 작성하도록 함
    -CPersonManager 클래스는 private 멤버로 CList<CPerson, CPerson&> m_aPersonList를 가지는 것이 아니라 CList<CPerson*, CPerson*> m_aPersonList를 가짐
    -그래야, CList에 데이터가 CPerson이나 CStudent이나 CFaculty이라해도 그 데이터형에 맞는 Show함수를 부를 수 있음.
    -만약, CList<CPerson, CPerson&>으로 하면 CPerson이나 CStudent이나 CFaculty의 데이터형에 상관없이 모두 CPerson의 Show를 부르게 됨.

    -차이점 예시


      CArray<Point, Point&> arr1;
      arr1.Add(Point(10,20));
      arr1.Add(Point(30,40));
      arr1.Add(Point3D(4,5,6));
      arr1.Add(Point3D(7,8,9));
      cout << endl << “CArray<Point, Point&> 출력 Loop by index:” << endl;
      for(int i = 0; i < arr1.GetSize(); i++) {
       arr1[i].Show(); // dynamic binding이 안됨
      }

    출력결과:
    CArray<Point, Point&> 출력 Loop by index:
    X= 10 Y= 20
    X= 30 Y= 40
    X= 4 Y= 5
    X= 7 Y= 8




      CArray<Point*, Point*> arr2;
      arr2.Add(new Point(10,20));
      arr2.Add(new Point(30,40));
      arr2.Add(new Point3D(4,5,6));
      arr2.Add(new Point3D(7,8,9));

      cout << endl << “CArray<Point*, Point*> 출력 Loop by index:” << endl;
      for(int i = 0; i < arr2.GetSize(); i++) {
       Point * pt = arr2[i];
       pt->Show();         // dynamic binding
      }

    출력결과:
    CArray<Point*, Point*> 출력 Loop by index:
    X= 10 Y= 20
    X= 30 Y= 40
    X=4 Y=5 Z=6
    X=7 Y=8 Z=9

    실습숙제2 (Due by 10/3)

    □ 단원 : 유틸리티 클래스, 집합 클래스
    □ 목표 : CString, 집합클래스 연습
    □ 주요 연습 내용 : CString, CList
    □ 준비자료 : 2_CPerson.zip (Person.cpp, Person.h, Student.cpp, Student.h, Faculty.cpp, Faculty.h, PersonManager.cpp, PersonManager.h, main.cpp)


    1102780408.zip
    참고: VC++는 Win32 console에 MFC를 사용하는 방식으로 작성한다.
    http://dis.dankook.ac.kr/lectures/hci08/entry/WIN32-Console-Program-Using-MFC-Classes



    연습문제 Ex2 (Due by 10/3 금 24시까지)
    -cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex2.zip으로 묶어서 낼 것. 보고서 (30%)

    [연습문제]


    1. CPerson 클래스의 변수를 CString 형으로 변환한다. 그에 따른 함수 내부를 수정한다. (10%)


    – CString m_strName;


    – int n_nID;


    – CString m_strPhone;


    – CString m_strAddr;


    – friend bool operator==(const CPerson &lhs, const CPerson &rhs) 함수 추가


     


    2. CStudent 클래스의 변수를 CString 형으로 변환한다. 그에 따른 함수 내부를 수정한다. (10%)


    – float m_nGPA;


    – friend bool operator==(const CStudent &lhs, const CStudent &rhs) 함수 추가


     


    3. CFaculty 클래스는 CPerson에서 파생한 클래스로 다음과 같은 멤버변수를 추가로 가지고 있다. (10%)


    – CString m_strDept;


    그리고 멤버 함수는 다음과 같은 기능을 한다.


    – CFaculty(); // default constructor 기본 생성자 함수


    – CFaculty(CString , int, CString, CString, CString); // conversion 형변환 생성자 함수


    – CFaculty(const CFaculty&); // copy constructor 복사 생성자 함수


    – CFaculty& operator=(const CFaculty&); // operator= 함수


    – virtual ~CFaculty(); // destructor 소멸자 함수


    – virtual void Show(); // CFaculty의 이름, 아이디, 전화번호, 주소, 소속을 보여줌


    – CString GetDepartment() const; // CFaculty의 소속 (m_strDept)을 돌려줌


    – friend std::ostream& operator<<(std::ostream&, const CFaculty&);


    – friend std::ostream& operator<<(std::ostream&, const CFaculty*);


    – friend std::istream& operator>>(std::istream&, CFaculty&);


    – friend bool operator==(const CFaculty &lhs, const CFaculty &rhs) 함수 추가


     


    4. CPerson, CStudent, CFaculty 목록을 CList를 이용하여 입출력을 통합 관리하는 CPersonManager 클래스를 작성한다. (20%)


    – private 멤버로 CList<CPerson*, CPerson*> m_aPersonList를 가짐


    – 소멸자는 모든 CPerson을 리스트에서 제거함


    – Add 함수는 CPerson을 리스트에 추가함


    – Remove 함수는 CList의 Find를 이용하여 동일한 CPerson이 존재하는지 확인 후 있으면 그것을 제거함


    – RemoveAll 함수는 모든 CPerson을 리스트에서 제거함


    – GetTotalNumberOfPeople 함수는 리스트에 존재하는 CPerson이 몇 명 있는지를 알려줌


    – GetPersonList 함수는 리스트를 돌려줌


    – Show 함수는 리스트에 존재하는 모든 CPerson의 Show()를 사용하여 모든 Person, Student, Faculty의 내용(즉, 이름, 아이디, 전화번호, 주소 등등)을 출력함


     


    5. main.cpp에서 CPersonManager 목록에 10개 이상의 CPerson, CStudent, CFaculty를 추가하고 난 후, 다음을 수행한다. (20%)


    – CPersonManger의 GetTotalNumberOfPeople 함수 사용하여, 리스트에 몇 명의 Person이 존재하는지 출력


    – CPersonManger의 Show 함수 사용하여, 리스트에 있는 모든 Person, Student, Faculty의 내용(즉, Person들의 이름, 아이디, 전화번호, 주소 등등)을 출력


    – CPersonManger의 Remove와 Show 함수를 사용하여, 각각 한 두 명의 Person, Student, Faculty를 리스트에서 지우고 난 후, 리스트에 있는 모든 내용을 출력


    – cin으로 CPerson, CStudent, CFaculty 정보를 입력받은 객체를 생성 후, 리스트에 있는 모든 내용을 출력


     

    WIN32 Console Program Using MFC Classes

    .NET2005


  • 프로젝트 새로 만들기

    • 메뉴에서 File->New->Project->Visual C++ 템플릿->Win32->Win32 Console Application를 선택한 후 “프로젝트 이름(예를 들어, Console)”을 적고 확인버튼을 누른다.
    • Console Application과 (Add common header files for)MFC을 선택하고 Finish버튼을 누른다.

    사용자 삽입 이미지
    사용자 삽입 이미지 
  • 솔루현 이름으로 폴더가 생김

  • 사용자 삽입 이미지


  • 코드추가

  • 사용자 삽입 이미지


  • Resource 편집

  • 사용자 삽입 이미지


  • 컴파일 (build F7)과 실행 (execute F5 또는 CTRL+F5)

  • 사용자 삽입 이미지

    MFC Utility & Collection Class demo

    MFC Console Program (MFC Utility & Collection Class 비템플렛 예제)
    1214643777.cpp
    MFC Console Program (MFC Collection Template Class 템플렛 예제)
    1395304735.zip
    Array/List/Map/Tree 자료구조 선택가이드
    http://minjang.egloos.com/482401

    MFC Collection Class
    http://msdn.microsoft.com/en-us/library/942860sh(VS.71).aspx


    COLLECT Sample: MFC Collection Class Demo
    http://dis.dankook.ac.kr/lectures/hci07/entry/COLLECT-Sample-Illustrates-MFC-Collection-Classes