Visual C++ Programming Common Controls

Slides:



Advertisements
Similar presentations
CH1 개발 효율이 높은 프로그램 구조
Advertisements

Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
2장 닷넷 프레임워크.
Lecture 2 MFC and Application Frameworks
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Visual C++ Programming Document/View Architecture 3
Internet Computing KUT Youn-Hee Han
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
Visual C++ Programming Tree Control/MultiThread
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
태양계 시뮬레이션 팀 명: 복학생 강유진 박지혜.
Visual C++ Programming Tree Control/MultiThread
10장 템플릿과 표준 템플릿 라이브러리(STL)
Visual C++ Programming Controls and CList
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
Visual C Feature Pack Furyheimdall.tistory.com.
25장. 메모리 관리와 동적 할당.
MFC Application Frameworks (AFX)
MFC 프로그래밍에 관한 팁 / Keyboard / Timer
Visual C++ Programming Output and File
Visual C++ Programming Common Controls
Visual C++ Programming Output and File
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
Lecture 3 Graphics with GDI
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
프로그래밍2 및 실습 C언어 기반의 C++ 2.
스택(Stack) 김진수
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
날짜: 팀명: TEAM-SIX 발표자: 이기영
명품 C++ 프로그래밍 1장. C++ 시작.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
13. 포인터와 배열! 함께 이해하기.
추상 데이터 타입 정의하기 Defining abstract data types
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
목차 성능과 최적화. 메모리할당. STL 알고리즘. 책의 성능 단원과 다른 단원들을 함께 포괄적으로 발표를 진행 하겠습니다.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
제 7장 이벤트.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
10장 템플릿과 표준 템플릿 라이브러리(STL)
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
컨트롤, 프로퍼티, 이벤트.
Chapter 14. 템플릿(Template) 2
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
房思琪的初恋乐园 ‘팡쓰치’로 보는 문학의 힘 정은비.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
17장. 포인터의 포인터.
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
C++ 언어의 특징
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
11장. 1차원 배열.
제 4장 Visual C++ COM 컴파일러.
Presentation transcript:

Visual C++ Programming Common Controls Department of Digital Contents Sang Il Park

REVIEW: MFC Template Library CList

Review: 템플릿 클래스 모든 타입의 배열을 위한 스마트 포인터 클래스 template <typename T> class AutoArray { public: AutoArray(T* ptr) { _ptr = ptr; } ~AutoArray() { delete[] _ptr;} T& operator[] (int index) { return _ptr[index]; } private: T* _ptr; };

Review: 템플릿 클래스의 사용 모든 타입의 배열을 위한 스마트 포인터 클래스 int main() { AutoArray<float> arr( new float [100] ); arr[0] = 99.99f; return 0; }

Review: 템플릿 클래스의 사용 템플릿 매개 변수의 사용 [29-1]

Standard Template Library C++ = 언어 클래스, 멤버함수, 상속, 템플릿, 오버로딩 등의 기술 STL = 템플릿 기반의 편한 사용 툴: 클래스, 함수 등의 집합체 array 나 pointer를 대체하는 데이터 관리에 용이

Review: Linked List 장점: 데이터의 추가 및 삭제가 용의한 데이터 구조 단점: 데이터의 접근이 순차적으로만 가능

Review: CList MFC에서 제공하는 Linked List Template Class 반드시 사용 전 afxtempl.h 을 include한다. 정의 방법: CList < datatype > a; 데이터 추가: CList::AddTail(..) CList::AddHead(..) 데이터 삭제: CList::RemoveTail(); CList::RemoveHeat(); CList::RemoveAt(..) 사용예: CList < int > a; 데이터 추가: CList::AddTail(3) CList::AddHead(4) 데이터 삭제: CList::RemoveTail(); CList::RemoveHeat(); CList::RemoveAt(..) iterator: POSITION

Review: Iterator Container에서 Pointer와 같은 역할을 하는 것 MFC의 iterator 변수형 : POSITION CList <int> a; a.AddTail(10); a.AddTail(20); a.AddTail(30); POSITION pos = a.GetHeadPosition(); // 첫 데이터 위치 반환 while(pos != NULL) { int value = a.GetNext(pos); // pos위치의 데이터반환 // pos는 다음 위치 가르킴 }

Iterator a pos value 10 20 30 NULL CList <int> a; a.AddTail(10); POSITION pos = a.GetHeadPosition(); while(pos != NULL) { int value = a.GetNext(pos); }

Iterator a pos value 10 20 30 NULL CList <int> a; a.AddTail(10); POSITION pos = a.GetHeadPosition(); while(pos != NULL) { int value = a.GetNext(pos); }

Iterator a pos value 10 10 20 30 1회호출 NULL CList <int> a; a.AddTail(10); a.AddTail(20); a.AddTail(30); POSITION pos = a.GetHeadPosition(); while(pos != NULL) { int value = a.GetNext(pos); } 1회호출

Iterator a pos value 10 20 20 30 2회호출 NULL CList <int> a; a.AddTail(10); a.AddTail(20); a.AddTail(30); POSITION pos = a.GetHeadPosition(); while(pos != NULL) { int value = a.GetNext(pos); } 2회호출

Iterator a pos value 10 30 20 30 3회호출 NULL CList <int> a; a.AddTail(10); a.AddTail(20); a.AddTail(30); POSITION pos = a.GetHeadPosition(); while(pos != NULL) { int value = a.GetNext(pos); } 3회호출

Iterator a pos value 10 30 20 30 NULL 종료 CList <int> a; a.AddTail(10); a.AddTail(20); a.AddTail(30); POSITION pos = a.GetHeadPosition(); while(pos != NULL) { int value = a.GetNext(pos); } 종료

Insertion // 맨 앞에 추가 CList::AddHead( value ) // 맨 뒤에 추가 CList::AddTail( value ) // 임의의 위치에 추가 CList::InsertAfter (POSITION, value)

Retrieval/Modification // 값 얻어오기 value = CList::GetAt( POSITION ) // 값의 reference 얻어오기 value & = CList::GetAt( POSITION ) CList <int> a; a.AddHead(10); a.AddHead(20); a.AddHead(30); POSITION pos; pos = a.GetHeadPosition(); int b = a.GetAt(pos); // value int &c = a.GetAt(pos); // reference

Removal // 맨 앞 삭제 CList::RemoveHead( ) // 맨 뒤 삭제 CList::RemoveTail( ) // 임의의 위치 삭제 CList::RemoveAt(POSITION) // 모두 삭제 CList::RemoveAll( )

기타 여러가지 MFC Container Class CList CVector CMap 반드시 사용 전 afxtempl.h 을 include한다.

코딩 연습 마우스의 궤적을 그리는 프로그램: 단 데이터는 CList를 이용하여 저장하라

코딩연습 CList를 이용한 여러가지 도형 저장

CImageList

이미지 리스트 (1/9) 이미지 리스트 사용 예 동일한 크기의 이미지 집합 각각의 이미지를 배열 항목처럼 취급하여 0부터 시작하는 인덱스로 참조 사용 예 트리 컨트롤과 리스트 컨트롤에 사용되는 비트맵

이미지 리스트 (2/9) 이미지 리스트 생성 방법 이미지 리스트 생성 함수 cx, cy: 이미지의 폭과 높이(픽셀 단위) nFlags: 이미지 리스트의 타입 지정 CImageList m_il; m_il.Create(...); BOOL CImageList::Create (int cx, int cy, UINT nFlags, int nInitial, int nGrow); BOOL CImageList::Create (UINT nBitmapID, int cx, int nGrow, COLORREF crMask);

이미지 리스트 (3/9) 이미지 리스트 생성 함수 (cont'd) nInitial: 초기에 포함할 이미지 개수 nGrow: 새로운 이미지를 추가하기 위해 이미지 리스트의 메모리를 재할당할 때 얼마만큼 여분의 메모리를 할당할 것인가를 나타냄 nBitmapID: 비트맵 리소스 ID crMask: 투명색으로 사용할 색상 원본 마스크

이미지 리스트 (4/9) 이미지 리스트 생성 예 IDB_BITMAP1 CImageList m_il1, m_il2; m_il1.Create(32, 32, ILC_COLOR4, 2, 1); m_il2.Create(IDB_BITMAP1, 48, 1, RGB(255, 255, 255));

이미지 리스트 (5/9) 이미지 추가 함수 hIcon: 아이콘 리소스를 가리키는 핸들값 pbmImage: 비트맵 리소스를 담고 있는 CBitmap 객체의 주소 crMask: 투명색으로 사용할 색상 int CImageList::Add (HICON hIcon); int CImageList::Add (CBitmap* pbmImage, COLORREF crMask);

이미지 리스트 (6/9) 이미지 추가 예 // 두 개의 아이콘을 이미지 리스트에 추가한다. m_il1.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); m_il1.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); // 비트맵을 이미지 리스트에 추가한다. CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); m_il2.Add(&bitmap, RGB(255, 255, 255));

이미지 리스트 (7/9) 화면 출력 함수 pDC: 출력할 대상을 나타내는 디바이스 컨텍스트 nImage: 출력할 이미지의 인덱스 pt: 출력 좌표 nStyle: 그리기 스타일(다음 페이지 표 참조) BOOL CImageList::Draw (CDC* pDC, int nImage, POINT pt, UINT nStyle);

이미지 리스트 (8/9) 그리기 스타일

이미지 리스트 (9/9) 화면 출력 예 void CExImageListView::OnDraw(CDC* pDC) { // 배경색을 CLR_NONE으로 설정한다. m_il.SetBkColor(CLR_NONE); m_il.Draw(pDC, 0, CPoint(100, 200), ILD_NORMAL); m_il.Draw(pDC, 0, CPoint(150, 200), ILD_BLEND25); m_il.Draw(pDC, 0, CPoint(200, 200), ILD_BLEND50); m_il.Draw(pDC, 0, CPoint(250, 200), ILD_MASK); }

이미지 리스트와 리스트 컨트롤 리스트 컨트롤 생성과 초기화 CImageList 객체 선언 후 CImageList::Create(), CImageList::Add() 등을 이용하여 생성과 초기화 CListCtrl::SetImageList()로 리스트 컨트롤에서 사용할 이미지 리스트 설정

이미지 리스트와 리스트 컨트롤 주요 함수 pImageList: 리스트 컨트롤에서 사용할 이미지 리스트 nImageListType: 이미지 리스트에 포함된 이미지의 용도를 나타내는 상수값 CImageList* CListCtrl::SetImageList (CImageList* pImageList, int nImageListType); nImageListType 용도 LVSIL_NORMAL 아이콘 보기 (32X32) LVSIL_SMALL 작은 아이콘 보기, 목록 보기, 보고서 보기 (16X16)

이미지 리스트와 리스트 컨트롤 주요 함수 nItem: 항목 인덱스이며 0부터 시작 lpszItem: 항목에 표시할 텍스트 nImage: 항목에 표시할 이미지로서 이미지 리스트에서의 인덱스 값을 사용 int CListCtrl::InsertItem (int nItem, LPCTSTR lpszItem, int nImage);

Tree Control

트리 컨트롤 (1/2) 트리 컨트롤 = 트리 뷰 컨트롤 이미지와 텍스트를 이용하여 계층적인 형태로 정보를 표시하는 용도로 사용

트리 컨트롤 (2/2) 용어 항목 부모 항목 자식 항목 루트 항목 트리 컨트롤에 표시되는 하나의 정보 하나 이상의 하위 항목을 가진 항목 자식 항목 부모 항목에 딸린 하위 항목 루트 항목 계층 구조에서 최상위 항목 루트 항목은 부모 항목을 가지지 않음

트리 컨트롤 클래스 (1/11) 트리 컨트롤 생성과 초기화 CTreeCtrl 객체 선언 후 CTreeCtrl::Create()로 트리 컨트롤 생성 CImageList 객체 선언 후 CImageList::Create(), CImageList::Add() 등을 이용하여 생성과 초기화 CTreeCtrl::SetImageList()로 트리 컨트롤에서 사용할 이미지 리스트 설정 CTreeCtrl::InsertItem()으로 항목 추가

트리 컨트롤 클래스 (2/11) 예제 코드 // ① CTreeCtrl 객체 선언과 트리 컨트롤 생성 m_tree.Create(WS_CHILD|WS_VISIBLE|WS_BORDER| TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT, CRect(10, 10, 150, 150), this, 101); // ② CImageList 객체 선언과 이미지 리스트 생성, 초기화 CImageList il; il.Create(IDB_BITMAP1, 16, 1, RGB(255, 255, 255));

트리 컨트롤 클래스 (3/11) 예제 코드 (cont'd) // ③ 이미지 리스트 설정 m_tree.SetImageList(&il, TVSIL_NORMAL); il.Detach(); // ④ 항목 추가 // 1레벨 초기화 HTREEITEM hSun = m_tree.InsertItem("태양", 0, 0, TVI_ROOT, TVI_LAST);

트리 컨트롤 클래스 (4/11) 예제 코드 (cont'd) // 2레벨 초기화 m_tree.InsertItem("수성", 1, 1, hSun, TVI_LAST); m_tree.InsertItem("금성", 1, 1, hSun, TVI_LAST); HTREEITEM hEarth = m_tree.InsertItem("지구", 1, 1, hSun, TVI_LAST); HTREEITEM hMars = m_tree.InsertItem("화성", 1, 1, hSun, TVI_LAST); // 3레벨 초기화 m_tree.InsertItem("달", 2, 2, hEarth, TVI_LAST); m_tree.InsertItem("포보스", 2, 2, hMars, TVI_LAST); m_tree.InsertItem("데이모스", 2, 2, hMars, TVI_LAST);

트리 컨트롤 클래스 (5/11) 주요 함수 dwStyle: 컨트롤 스타일을 지정. 일반 윈도우 스타일(WS_*)과 트리 컨트롤 스타일(TVS_*)의 조합을 사용 rect: 컨트롤의 크기와 위치 pParentWnd: 부모 윈도우 nID: 컨트롤 ID BOOL CTreeCtrl::Create (DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);

트리 컨트롤 클래스 (6/11) 주요 함수 (cont'd) pImageList: 트리 컨트롤에서 사용할 이미지 리스트 nImageListType: 이미지 리스트에 포함된 이미지의 용도. 항목을 나타내는 일반 이미지일 경우에는 TVSIL_NORMAL, 사용자 정의 상태 이미지일 경우에는 TVSIL_STATE를 사용 CImageList* CTreeCtrl::SetImageList (CImageList * pImageList, int nImageListType);

트리 컨트롤 클래스 (7/11) 주요 함수 (cont'd) lpszItem: 항목에 표시할 텍스트 nImage: 항목에 표시할 이미지를 나타내며 이미지 리스트에서의 인덱스 값을 사용 nSelectedImage: 항목이 선택되면 표시할 이미지를 나타내며 이미지 리스트에서의 인덱스 값을 사용 HTREEITEM CTreeCtrl::InsertItem (LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);

트리 컨트롤 클래스 (8/11) 주요 함수 (cont'd) hParent: 부모 항목을 나타내는 HTREEITEM 값이다. 루트 항목을 추가할 경우에는 TVI_ROOT를 사용 hInsertAfter: 항목을 추가할 위치를 나타내며 보통 다음 표의 값 중 하나를 사용. 항목 다음 위치에 추가하고 싶을 경우 그 항목을 나타내는 HTREEITEM 값을 사용 값 의미 TVI_FIRST 제일 앞쪽에 추가한다. TVI_LAST 제일 뒤쪽에 추가한다. TVI_ROOT 루트 항목으로 추가한다. TVI_SORT 철자순으로 정렬이 되도록 추가한다.

트리 컨트롤 클래스 (9/11) 스타일 변경하기 dwRemove: 제거할 스타일 dwAdd: 추가할 스타일 nFlags: 기본값 사용 BOOL CWnd::ModifyStyle (DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);

트리 컨트롤 클래스 (10/11) 선택 항목 알아내기 HTREEITEM hItem = m_tree.GetSelectedItem(); if(hItem != NULL) { CString str = m_tree.GetItemText(hItem); MessageBox(str); }

트리 컨트롤 클래스 (11/11) 항목 추가와 삭제 항목 추가 항목 삭제 CTreeCtrl::InsertItem() CTreeCtrl::DeleteItem() HTREEITEM hItem = m_tree.GetSelectedItem(); if(hItem != NULL) { m_tree.DeleteItem(hItem); }