Microsoft Word - hci08-final-answer.doc

Similar documents
Microsoft Word - hci07-final-answer.doc

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

윈도우시스템프로그래밍

슬라이드 1

5장 MFC기반 다지기

윈도우 프로그래밍의 개념

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - hci2-lecture9.ppt

Microsoft PowerPoint - hci2-lecture7.ppt

Microsoft PowerPoint - hci2-lecture10.ppt

Microsoft Word - cg07-midterm.doc

윈도우시스템프로그래밍

단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

Visual C++의 개요

[제1강] 텍스트를 입력하세요

윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념

Microsoft Word - java19-1-midterm-answer.doc

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

4S 1차년도 평가 발표자료

04장 메시지 처리 유형

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

PowerPoint Presentation

Chapter #01 Subject

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

Programming hwp

제11장 프로세스와 쓰레드

Microsoft PowerPoint - CPP_chap6_interface(2)

Microsoft PowerPoint _대화상자.ppt

중간고사

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

untitled

윈도우시스템프로그래밍

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

윈도우시스템프로그래밍

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

윈도우즈프로그래밍(1)

그래픽 프로그래밍

Programming hwp

C++ Programming

Comtrol ID 레이블 Hotkey Callback 함수 ⑴ Button, IDC_BTN_DEPT, &Department, OnBtnDepartment ⑵ Button, IDC_BTN_EMP, &Employee, OnBtnEmployee ⑶ Button, IDC_B

Programming hwp

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

UI TASK & KEY EVENT

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

歯Lecture2.PDF

윈도우 프로그래밍의 개념

윈도우시스템프로그래밍

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint 프레젠테이션

Microsoft PowerPoint - hci2-lecture8.ppt

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Lab 3. 실습문제 (Single linked list)_해답.hwp

Microsoft PowerPoint _파일입출력.ppt

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

Chapter 1. MFC 시작하기

MFC 프로그래밍

제8장 자바 GUI 프로그래밍 II

Convenience Timetable Design

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint Presentation

Microsoft PowerPoint - hci2-lecture8.ppt

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

게임 기획서 표준양식 연구보고서

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - CPP_chap7_dialogbox(2)

C 언어 프로그래밊 과제 풀이

UI TASK & KEY EVENT

Microsoft PowerPoint - Java7.pptx

슬라이드 1

[제1강] 텍스트를 입력하세요

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

좀비프로세스 2

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

C++ Programming

Microsoft PowerPoint - C++ 5 .pptx

<4D F736F F F696E74202D203038C0E520C7A5C1D820C4C1C6AEB7D1205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

오버라이딩 (Overriding)

PowerPoint Template

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

DLL(Dynamic Linked Library)

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

슬라이드 1

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint - Chapter 6.ppt

WISHBONE System-on-Chip Interconnection Architecture for Portable IP Cores

설계란 무엇인가?

Programming hwp

Microsoft PowerPoint - additional07.ppt [호환 모드]

1장. 유닉스 시스템 프로그래밍 개요

중간고사

슬라이드 1

어댑터뷰

Transcription:

기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 다음문장의내용이맞으면 True, 틀리면 False를표시하시오. (10점) 1) CCmdUI 클래스는 CObject 파생클래스로사용자인터페이스의요소상태를변경할수있다. F 2) 일반적으로통지메시지를위해표준컨트롤은 WM_COMMAND 메시지를사용하지만공통컨트롤은 WM_NOTIFY 메시지를사용한다. T 3) MFC에서컨트롤 (Controls) 은일반적으로대화상자에많이사용되고있으며, 항상자식윈도우 (Child Window) 로만존재한다. T 4) 뮤텍스는서로다른프로세스에속한쓰레드간의동기화를위한목적으로사용할수없다. F 5) SDI (Single Document Interface) 응용프로그램에서는하나의도큐먼트와하나의뷰객체만존재한다. F 2. 다음문장에맞게빈칸을채워라. (10점) 1) 비모드형대화상자 는대화상자가출력되어있는동안제어권을독점하고있지않은형태로대화상자를닫지않더라도응용프로그램윈도우와정보를교환할수있다. 2) 작업자쓰레드 는사용자입력을필요로하지않는작업을백그라운드로수행할때사용하는쓰레드이다. 3) 텍스트의입력과편집하는기능을제공하는컨트롤은 편집컨트롤 (Edit Control) 이다. 4) MFC에서제공하는쓰레드동기화 (synchronization) 클래스로 CSyncObject, CCriticalSection, CMutex, CSemaphore, CEvent 가있다. 5) 뷰영역전체를대화상자가차지하고컨트롤을이용하여시각적으로화면을디자인할수있는대화상자기반의뷰클래스는 CFormView 이다. 1/9

3. Windows 운영체제는우선순위 (Priority) 에기반한 CPU 스케줄링을사용한다. 즉, 우선순위가높은쓰레드에게우선적으로 CPU 시간을할당하게되는데, 쓰레드의우선순위결정요소를예를들어서간단히설명하라. (5점) 그리고우선순위 CPU 스케줄링에서발생할수있는문제점을기술하고이를해결하기위한 Windows 운영체제의 CPU 스케줄링을설명하라. (5점) 기초우선순위는우선순위클래스 (Priority Class) + 우선순위레벨 (Priority Level) 로결정됨. Windows는하나의프로세스가생성한쓰레드는모두동일한우선순위클래스를가짐. 우선순위클래스의종류로실시간, 높음, 보통초과, 보통, 보통이하, 낮음이있음. 우선순위클래스안에다시상대적인우선순위가있음. 우선순위레벨의종류로 TIME_CRITICAL, HIGHEST, ABOVE_NORMAL, NORMAL, BELOW_NORMAL, LOWEST, IDLE이있음. 우선순위스케줄링은기아상태문제 ( 즉, 낮은우선순위작업들이 CPU를사용하지못하는경우 ) 가발생할수있으며, 이를해결하기위하여윈도우운영체제의 CPU 스케줄링은쓰레드의우선순위를동적으로변동시켜줌. 일단쓰레스의시간할당량이만료되면, 인터럽트당함. 인터럽트된가변우선순위쓰레드는우선순위가낮아짐. 가변우선순위쓰레드가 Wait 상태에서풀려나면, 쓰레드의종류에따라우선순위를가변적으로높여줌. 그리고활성화된프로세스의경우후위프로세스에비해 3배정도시간할당량을해줌. 4. MFC 응용프로그램에서사용하는메시지종류로윈도우 (Window) 메시지, 통지 (Notification) 메시지, 명령 (Command) 메시지, 명령갱신 (Command Update) 메시지, 사용자정의메시지가있다. 각메시지에대해예를들어간단히설명하라. (10점) 윈도우메시지 (Window Message) 통지메시지 (Notification Message) 명령메시지 (Command Message) 명령갱신메시지 (Command Update Message) 사용자정의메시지 (User Defined Message) WM_ 로시작하는메시지 (WM_COMMAND 제외 ) 로윈도우생성, 종료, 마우스, 키보드입력등다양한원인에의해발생 WM_PAINT, WM_CREATE, WM_DESTROY, WM_ACTIVE, WM_INITDIALOG, WM_KEYDOWN, WM_CHAR, WM_MOUSEMOVE, WM_LBUTTONDOWN 버튼과같은컨트롤객체나자식윈도우에서부모윈도우로보내는메시지 BN_CLICKED, EN_CHANGE, CBN_SELCHANGE, LBN_SELCHANGE 메뉴, 툴바, 엑셀레이터키와같은사용자인터페이스객체로부터발생하는 WM_COMMAND 메시지메뉴, 툴바, 상태바등의상태를갱신할필요가있을때발생하는 MFC에서만사용하는고유의메시지 MFC가제공하지않는윈도우메시지로사용자가원하는메시지를선언하고 ON_MESSAGE 매크로를이용하여메시지와함수를연결하고 SendMessage로사용자정의메시지를발생시켜사용 2/9

5. 다음그림은도큐먼트 / 뷰구조 MFC 응용프로그램의파일메뉴를보여주고있다. 새파일 의경우, CWinApp 클래스에서 ID_FILE_NEW와연결된 OnFileNew() 커맨드핸들러함수를호출하여, 새로운도큐먼트를생성하고 CDocument 클래스의 OnNewDocument() 가호출되고, 그안에서 DeleteContents() 가호출되는구조를가지고있다. 이상과같이, 열기, 저장, 그리고 다른이름으로저장 하는경우에대한처리과정을설명하라 (10점) ID_FILE_NEW ID_FILE_OPEN ID_FILE_SAVE ID_FILE_SAVE_AS 열기 ID_FILE_OPEN CWinApp 클래스의 OnFileOpen() 커맨드핸들러함수호출 CDocument 클래스의 OnOpenDocument() 함수호출 CDocument 클래스의 DeleteContents() 함수호출 CDocument 클래스의 Serialize() 함수호출저장 ID_FILE_SAVE CWinApp 클래스의 OnFileSave() 커맨드핸들러함수호출 CDocument 클래스의 OnSaveDocument() 함수호출 CDocument 클래스의 Serialize() 함수호출다른이름으로저장 ID_FILE_SAVE_AS CWinApp 클래스의 OnFileSaveAs() 커맨드핸들러함수호출 CWinApp 클래스의 OnFileSave() 커맨드핸들러함수호출 CDocument 클래스의 OnSaveDocument() 함수호출 CDocument 클래스의 Serialize() 함수호출 Serialize() 6. 다음사용자정의클래스 CPerson 에직렬화를구현하라. (10 점 ) class CPerson public: CString m_strname; int m_nage; public: CPerson(); CPerson(CString, int); ~CPerson(); void SetName(CString strname) m_strname = strname; void SetAge(int nage) m_nage = nage; 3/9

; const CString GetName() return m_strname; const int GetAge() return m_nage; CPerson::CPerson() m_strname = _T(""); m_nage = 0; CPerson::CPerson(CString strname, int nage) m_strname = strname; m_nage = nage; CPerson::~CPerson() class CPerson : public CObject DECLARE_SERIAL(CPerson) public: CString m_strname; int m_nage; public: CPerson(); CPerson(CString, int); virtual ~CPerson(); virtual void Serialize(CArchive& ar); ; void SetName(CString strname) m_strname = strname; void SetAge(int nage) m_nage = nage; const CString GetName() return m_strname; const int GetAge() return m_nage; IMPLEMENT_SERIAL(CPerson, CObject, 1) CPerson::CPerson() m_strname = _T(""); m_nage = 0; CPerson::CPerson(CString strname, int nage) m_strname = strname; m_nage = nage; CPerson::~CPerson() void CPerson::Serialize(CArchive &ar) CObject::Serialize(ar); // 기본클래스의함수호출 if (ar.isstoring()) // 쓰기상태이면모든변수를순서대로아카이브에저장 ar << m_strname << m_nage; else // 모든변수를순서대로아카이브로부터읽음 ar >> m_strname >> m_nage; // Doc 클래스에서사용자정의클래스의 Serialize를사용해야함 void CPersonDoc::Serialize(CArchive & ar) if (ar.isstoring()) m_persondata.serialize(ar); else m_persondata.serialize(ar); 4/9

7. 서브클래싱 (Subclassing) 과메시지반사 (Message Reflection) 를간단히서술하고, 구체적인사례를들어구현방법을설명하라. (10 점 ) 서브클래싱은윈도우로가는메시지를중간에서붙잡아서처리하는기법으로메시지종류에따라처리한후원래의프로시저에게전달해주거나전달하지않을수있음. 구현은 : 1. 기존의컨트롤클래스를기반으로새로운컨트롤클래스를생성함. 예를들어 CLetterEdit는숫자를받지않고문자 (Letter) 만받는 Edit Control. 2. 메시지핸들러를재정의하거나새로운메시지핸들러를추가하여정의. 예를들어 CLetterEdit에 WM_CHAR 메시지핸들러를문자만받도록재정의. 3. 뷰클래스에서서브클래싱된컨트롤클래스를지정하고 CWnd::SubclassWindow() 또는 CWnd::SubclassDlgItem() 함수를호출해줌. 메시지반사는부모윈도우가처리하지않는통지메시지를컨트롤스스로가통지메시지를처리하는것임. 구현은 : 1. 기존의컨트롤클래스를기반으로새로운컨트롤클래스를생성하고자신의통지를메시지를처리하도록함수를추가함. 예를들어더블클릭항목에메시지박스를출력해주는나만의 CListBox Control. 2. 메시지반사핸들러를추가함. 예를들어, CMyListBox에 =LBN_DBLCLK 메시지핸들러를추가하여재정의함. 부모윈도우에서더블클릭을처리하는함수를제공하지않을때이핸들러가불려짐. 8. 다음그림은대화상자의 DDX(Dialog Data exchange) Value 작동을보여주고있다. 그림을보고 DDX 자동화를위한 UpdateData(FALSE) 와 UpdateData(TRUE) 함수가언제호출되고어떤방식으로 Edit 컨트롤과멤버변수의값 (m_str) 에적용되는지그작동원리를구체적으로서술하라. (10점) UpdateData() 함수는 DDX Value 형태로연결되었을경우, 컨트롤자원과멤버변수값을 update하는기능을가짐. 대화상자생성시초기화함수 OnInitDialog() 에서호출되는 UpdateData(FALSE) 는멤버변수에설정된값을컨트롤에적용됨. 내부적으로 DoDataExchange() 함수가호출되어그안에정의된 DDV_* 함수를호출하여유효성을검사하고 DDX_* 함수를호출하여데이터를전송함. 대화상자종료시 OnOK() 에서호출되는 UpdateData(TRUE) 는컨트롤에있는값을연결된멤버변수값에적용됨. 내부적으로 DoDataExchange() 함수가호출되어그안에정의된 DDX_* 함수를호출하여데이터를전송함. 5/9

9. 다음도큐먼트 / 뷰클래스주요가상함수인 CView::OnInitialUpdate, CView::OnUpdate, CDocument::SetModifiedFlag, CDocument::UpdateAllViews 기능을간단히설명하라 (10점) OnInitialUpdate() 함수는뷰객체가도큐먼트객체와연결된후화면에보이기전에자동으로호출 OnUpdate() 함수는 CDocument::UpdateAllViews 함수와 CView::OnInitialUpdate 함수에서호출되는것으로 CWnd::Invalidate을이용하여뷰화면전체를무효화시킴. 효과적인화면갱신이필요할때재정의함 UpdateAllViews() 함수는도큐먼트객체와연결된모든뷰의화면을갱신 SetModifiedFlag() 함수는도큐먼트객체가유지하는데이터를수정한경우호출 10. 다음은컨트롤클래스활용예제를보여주고있다. 이프로그램의실행시처음나타나는모습과실행결과를그림으로나타내고프로그램에주석을달아라. (10점) --PersonDlg.cpp #include "stdafx.h" #include "SimplePersonRecord.h" #include "PersonDlg.h" // CPersonDlg dialog IMPLEMENT_DYNAMIC(CPersonDlg, CDialog) CPersonDlg::CPersonDlg(CWnd* pparent /*=NULL*/) : CDialog(CPersonDlg::IDD, pparent), m_strname(_t("")), m_strid(_t("")), m_strphone(_t("")) CPersonDlg::~CPersonDlg() void CPersonDlg::DoDataExchange(CDataExchange* pdx) CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_NAME, m_strname); DDX_Text(pDX, IDC_EDIT_ID, m_strid); DDX_Text(pDX, IDC_EDIT_PHONE, m_strphone); --SimplePersonRecordView.cpp #include "stdafx.h" #include "SimplePersonRecord.h" #include "SimplePersonRecordDoc.h" #include "SimplePersonRecordView.h" 6/9

#include "PersonDlg.h" // CSimplePersonRecordView IMPLEMENT_DYNCREATE(CSimplePersonRecordView, CFormView) BEGIN_MESSAGE_MAP(CSimplePersonRecordView, CFormView) ON_BN_CLICKED(IDC_BUTTON_ADD, &CSimplePersonRecordView::OnBnClickedButtonAdd) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, &CSimplePersonRecordView::OnLvnItemchangedList) END_MESSAGE_MAP() // CSimplePersonRecordView construction/destruction CSimplePersonRecordView::CSimplePersonRecordView() : CFormView(CSimplePersonRecordView::IDD) // TODO: add construction code here m_strname = ""; m_strid = ""; m_strphone = ""; CSimplePersonRecordView::~CSimplePersonRecordView() void CSimplePersonRecordView::DoDataExchange(CDataExchange* pdx) CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST, m_ctrllist); BOOL CSimplePersonRecordView::PreCreateWindow(CREATESTRUCT& cs) return CFormView::PreCreateWindow(cs); void CSimplePersonRecordView::OnInitialUpdate() CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_ctrllist.insertcolumn(0, _T(" 이름 "), LVCFMT_LEFT, 100); m_ctrllist.insertcolumn(1, _T(" 학번 "), LVCFMT_LEFT, 100); m_ctrllist.insertcolumn(2, _T(" 전화번호 "), LVCFMT_LEFT, 150); m_ctrllist.setextendedstyle(lvs_ex_fullrowselect); // CSimplePersonRecordView diagnostics #ifdef _DEBUG void CSimplePersonRecordView::AssertValid() const CFormView::AssertValid(); void CSimplePersonRecordView::Dump(CDumpContext& dc) const CFormView::Dump(dc); CSimplePersonRecordDoc* CSimplePersonRecordView::GetDocument() const ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSimplePersonRecordDoc))); return (CSimplePersonRecordDoc*)m_pDocument; #endif // CSimplePersonRecordView message handlers void CSimplePersonRecordView::OnBnClickedButtonAdd() 7/9

// TODO: Add your control notification handler code here if (UpdateData()!= TRUE) return; CPersonDlg dlg; if(dlg.domodal() == IDOK) m_strname = dlg.m_strname; m_strid = dlg.m_strid; m_strphone = dlg.m_strphone; int index = m_ctrllist.getitemcount(); m_ctrllist.insertitem(index, m_strname); m_ctrllist.setitemtext(index, 1, m_strid); m_ctrllist.setitemtext(index, 2, m_strphone); void CSimplePersonRecordView::OnLvnItemchangedList(NMHDR *pnmhdr, LRESULT *presult) LPNMLISTVIEW pnmlv = reinterpret_cast<lpnmlistview>(pnmhdr); // TODO: Add your control notification handler code here if(pnmlv->uchanged & LVIF_STATE) if(pnmlv->unewstate & (LVIS_SELECTED LVIS_FOCUSED)) m_strname = m_ctrllist.getitemtext(pnmlv->iitem, 0); m_strid = m_ctrllist.getitemtext(pnmlv->iitem, 1); m_strphone = m_ctrllist.getitemtext(pnmlv->iitem, 2); *presult = 0; CPersonDlg dlg(this); dlg.m_strname = m_strname; dlg.m_strid = m_strid; dlg.m_strphone = m_strphone; dlg.domodal(); 8/9

OnInitialUpdate - 프로그램처음실행시나타나는모습단국대학교멀티미디어공학 HCI 프로그래밍 II 기말고사 (2008년가을학기 ) 2008년 12월 17일학과학번이름 OnBnClickedButtonAdd - 마우스로 Add 버튼을눌렀을경우, CPersonDlg 대화상자가생성되고, 사용자는이대화상자에이름, 학번, 전화번호를입력하고 OK 버튼을누르면리스트에항목이추가된다 OnLvnItemchangedList - 마우스로리스트항목을선택했을경우, 해당항목에대한정보를가진 CPersonDlg 대화상자가뜬다 - 끝 - 9/9