300 likes | 642 Views
Windows 프로그래밍 #3. 1. MFC 2. 헝가리안 표기법 3. STL 작성자 : 양문선 , 2006/11/9. MFC. Microsoft Foundation Class API 는 프로그래머 자신이 처음부터 끝까지 프로그램의 코드를 작성하는 방식이기 때문에 생산성이 떨어지고 비효율적 Visual C++ 과 같은 개발 도구들은 도구 자체가 스스로 기본적인 소스코드를 생성해주므로 사용자는 최소의 코드에만 신경을 집중함으로써 좀 더 빠르고 쉬운 작업이 가능하게 되었다
E N D
Windows 프로그래밍 #3 1. MFC 2. 헝가리안 표기법 3. STL 작성자 : 양문선, 2006/11/9
MFC • Microsoft Foundation Class • API는 프로그래머 자신이 처음부터 끝까지 프로그램의 코드를 작성하는 방식이기 때문에 생산성이 떨어지고 비효율적 • Visual C++과 같은 개발 도구들은 도구 자체가 스스로 기본적인 소스코드를 생성해주므로 사용자는 최소의 코드에만 신경을 집중함으로써 좀 더 빠르고 쉬운 작업이 가능하게 되었다 • MFC는 OOP를 근간으로 하므로 코드의 확장이 쉽고(extensibility), 또한 재사용성(reusability)과 유지보수성(maintenability)이 좋다
MFC AppWizard (1/6) 단일문서 (메모장) 다중문서(시스템 편집기) 다이얼로그 기반(지뢰찾기)
MFC AppWizard (2/6) 데이터베이스 관련 지원사항을 선택한다
MFC AppWizard (3/6) OLE( Object Linking & Embedding )지원과 관련된 옵션을 선택한다
MFC AppWizard (4/6) 사용자 인터페이스와 WOSA(Windows Open Services Architecture), 파일확장자, 윈도우 스타일을 선택한다.
MFC AppWizard (5/6) 소스파일의 형식을 선택한다
MFC의 구성요소 • App : 프로그램 초기화/종료, 메세지 루트 포함, 메인 프레임, 뷰, 도큐먼트 생성 관리. • MainFrame : 프로그램의 메인 윈도우 관리, 메뉴, 툴바, 상태바와 같은 비클라이언트 영역을 관리. • Doc : 뷰에 출력되는 데이터 보관, 디스크에 데이터 저장 및 로드 • View : 클라이언트 영역인 뷰 윈도우 관리, 도큐먼트의 데이트를 화면이나 프린터등에 디스플레이
참고 • http://www.hanpoi.wo.to/ • http://myhome.hanafos.com/~kukdas/index.html
헝가리안 표기법 Type Prefix 예 비고 char c cDirSeperator BOOL b bIsSending int n nVariableCount UINT n nMyUnsignedInt WORD w wListID LONG l lAxisRatio DWORD dw dwPackedmessage * (pointer) p pWnd FAR * lp lpWnd LPSTR lpsz lpszFileName z는 NULL로 끝남을 handle h hWnd 의미 callback lpfn lpfnHookProc 함수 포인터
헝가리안 표기법 Type Prefix 예 CRect rect rectScroll CPoint pt ptMouseClick CSize sz szRectangle CString str strFind CWnd Wnd WndControl CWnd * pWnd pWndDialog
헝가리안 표기법 Type Prefix 예 범위 여러 리소스에서 공유 IDR_ IDR_MAINFRAME 1-0x6FFF Dialog 리소스 IDD_ IDD_ABOUT 1-0x6FFF Dialog 리소스 Help context ID HIDD_ HIDD_HELP_ABOUT 0x2001- 0x26FF (for context-sensitive help) 비트맵 리소스 IDB_ IDB_SMILEY 1-0x6FFF 커서 리소스 IDC_ IDC_HAND 1-0x6FFF 아이콘 리소스 menu, toolbar command ID_ ID_CIRCLE_TOOL 0x8000-0xDFFF Command help context HID_ HID_CIRCLE_TOOL 0x1800-0x1DFF Message box prompt IDP_ IDP_FATALERROR 8-0xDFFF Message box help context HIDP_ HIDP_FATALERROR 0x3008-0x3DFF String 리소스 IDS_ IDS_ERROR12 1-0x7FFF 다이얼로그 템플릿의 control IDC_ IDC_COMBO1 8-0xDFFF
참고 • http://islab.hufs.ac.kr/lecture/vp/2004/VP02.ppt
STL • 표준 템플릿 라이브러리 • 다양한 제네릭(generic) 알고리즘과 데이터구조로 구성된 범용 라이브러리
템플릿 template • 서로 다른 두 개 이상의 클래스가 유사한 내용으로 중복되어 정의되어 있을 경우 • 실제 클래스의 정의는 템플릿 클래스를 정의하는 부분만 존재한다. • 클래스의 객체를 생성 시에 템플릿 인자를 지정함으로서 템플릿 클래스의 객체를 생성할 수 있다. • 생성된 객체는 일반적인 클래스로부터 생성된 객체와 동일하다. • 자료형에 제한을 받지 않는 객체를 생성할 수 있다. • 컴파일 시간이 길어지는 단점이 있다.
템플릿 template • template <class T> class Data{private:T x;public:void SetX(T p) { x = p; } T GetX();}; template <class T> T Data<T>::GetX(){return x;}
템플릿 template • void main(){Data<int> objInt;Data<char> objChar;Data<double> objDouble; objInt.SetX(10);objChar.SetX('A'); objDouble.SetX(5.6); cout << "INT x = " << objInt.GetX() << endl; cout << "Char x = " << objChar.GetX() << endl;cout << "Double x = " << objDouble.GetX() << endl;}
컨테이너 container • 시퀀스 컨테이너 • 벡터(vector) • 덱(Deques) • 리스트(list) • 정렬 연관 컨테이너 • 셋과 멀티셋 (set & multiset) • 맵과 멀티맵 (map & multimap)
반복자 iterator • 포인터와 유사한 객체로서 STL 알고리즘이 컨테이너에 저장된 객체들의 시퀀스를 순회할 때 사용.
참고 • STL 튜토리얼 레퍼런스 가이드 제2판 (표준 템플릿 라이브러리를 이용한 C++프로그래밍)