Visual C++ Programming Common Controls

Slides:



Advertisements
Similar presentations
메뉴 용어 (1/6) 최상위 메뉴 = 메뉴 바 최상위 메뉴 = 메뉴 바.
Advertisements

목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
파워포인트 2007.
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Visual C++ Programming Document/View Architecture 3
제4장 대화상자.
New MapTool manual Kim Dong-Sung.
코크파트너 설치 가이드 Window 7.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
제 9 장 구조체와 공용체.
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
Visual C++ Programming Tree Control/MultiThread
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
자료 구조: Chapter 3 (2)구조체, 포인터
Visual C++ Programming Tree Control/MultiThread
forms 객체 입력상자 체크상자, 라디오 버튼 목록상자
예제로 배우는 Visual Basic 선곡기를 통해 익히는 리스트박스와 콤보박스
5장. 참조 타입.
마우스(Mouse) 다루기 컴퓨터응용 및 실습 I.
제4장 대화상자 4.1 CDialogEx 클래스 4.2 대화상자 기반의 프로그램 실습 4-1 MFC 기본 컨트롤 사용법 익히기
Visual C++ Programming Common Controls
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Visual C++ Programming Controls
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
DK-128 FND 실습 아이티즌 기술연구소 김태성 연구원
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
11장. 1차원 배열.
인터넷응용프로그래밍 JavaScript(Intro).
CHAP 13. 방명록 만들기 실습.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
10장 tkinter로 GUI 만들기.
Microsoft SharePoint를 사용자 지정하는 방법 온라인 웹 사이트
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
- CPC 초기화면의 2, 3번을 참조하여 인터넷 옵션을 변경한다. (상세화면은 다음페이지 참조)
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
홍익대학교 메일 시스템 구축 그룹웨어 메일 이전 하기.
24장. 파일 입출력.
CHAP 5. 레이아웃.
DK-128 FND 실습 아이티즌 기술연구소
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
2 보안 1 도구 윈도우 XP > 온밀크 프로그램 설치 장애 (보안 설정) / 품목추가 깨질 때 장애증상
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
1차시: 낮과 밤이 생기는 원리 지구과학
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
CHAP 21. 전화, SMS, 주소록.
Chapter 03 윈도 폼 컨트롤 1.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
메뉴(Menu) 컴퓨터응용 및 실습 I.
3. 모듈 (5장. 모듈).
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
7 생성자 함수.
6 객체.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
BoardGame 보드게임 따라가기.
Presentation transcript:

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

Common Controls

공통 컨트롤 기초 (1/5) 컨트롤 툴바 표준 컨트롤 공통 컨트롤

공통 컨트롤 기초 (2/5) 공통 컨트롤 종류

공통 컨트롤 기초 (3/5) 공통 컨트롤 종류 (cont'd)

공통 컨트롤 기초 (4/5) 특징 표준 컨트롤은 USER.EXE에 구현되어 있지만 공통 컨트롤은 COMCTL32.DLL에 구현되어 있다. COMCTL32.DLL의 버전에 따라 사용할 수 있는 공통 컨트롤의 종류와 기능에 제약이 있다. 사용하기 전에 반드시 ::InitCommonControls() 또는 ::InitCommonControlsEx()를 호출해야 한다. MFC를 사용하는 경우 이 과정은 자동으로 이루어진다. 일반적으로 통지 메시지를 위해 표준 컨트롤은 WM_COMMAND 메시지를 사용하지만 공통 컨트롤은 WM_NOTIFY 메시지를 사용한다.

공통 컨트롤 기초 (5/5) MFC 클래스 계층도

List Control

리스트 컨트롤 (1/3) 리스트 컨트롤 = 리스트 뷰 컨트롤 표시 방법 이미지와 텍스트를 이용하여 다양한 형태로 정보를 표시하는 용도로 사용 표시 방법 아이콘 보기 32*32 크기의 아이콘과 텍스트로 항목 표시 작은 아이콘 보기 16*16 크기의 아이콘과 텍스트로 항목 표시 목록 보기

리스트 컨트롤 (2/3) 표시 방법 (cont'd) 보고서 보기 헤더 컨트롤 항목 서브 항목 16*16 크기의 아이콘과 텍스트로 항목 표시 서브 항목으로 부가적인 정보 표시 헤더 컨트롤로 각 열의 폭 조절과 항목 정렬 가능 헤더 컨트롤 항목 서브 항목

리스트 컨트롤 (3/3) 리스트 컨트롤 스타일

리스트 컨트롤 클래스 (1/17) 리스트 컨트롤 생성과 초기화 CListCtrl 객체 선언 후 CListCtrl::Create()로 리스트 컨트롤 생성 CListCtrl::InsertColumn()으로 보고서 보기에서 표시할 헤더 초기화 CListCtrl::InsertItem()으로 항목 추가 CListCtrl::SetItemText()로 하위 항목 초기화

리스트 컨트롤 클래스 (2/17) 예제 코드 // ① CListCtrl 객체 선언과 리스트 컨트롤 생성 CListCtrl m_list; m_list.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT, CRect(0, 0, 300, 100), this, IDC_LIST1); // ② 헤더 초기화 m_list.InsertColumn(0, "이름", LVCFMT_LEFT, 100); m_list.InsertColumn(1, "성적", LVCFMT_LEFT, 100); m_list.InsertColumn(2, "학점", LVCFMT_LEFT, 100);

리스트 컨트롤 클래스 (4/17) 예제 코드 (cont'd) // ③ 항목 추가 m_list.InsertItem(0, "김철수", 0); m_list.InsertItem(1, "이영희", 0); m_list.InsertItem(2, "박선아", 0); // ④ 하위 항목 추가 m_list.SetItemText(0, 1, "90"); m_list.SetItemText(0, 2, "A"); m_list.SetItemText(1, 1, "95"); m_list.SetItemText(1, 2, "A+"); m_list.SetItemText(2, 1, "70"); m_list.SetItemText(2, 2, "B0");

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

리스트 컨트롤 클래스 (7/17) 주요 함수 (cont'd) nCol: 열 번호를 나타내며 0부터 시작 lpszColumnHeading: 헤더 컨트롤에 표시할 텍스트 nFormat: 헤더 컨트롤에 표시할 텍스트의 정렬 방식을 나타내며 LVCFMT_LEFT(왼쪽), LVCFMT_RIGHT(오른쪽), LVCFMT_CENTER(가운데) 중 하나를 선택 nWidth: 열의 폭(픽셀 단위) nSubItem: 연관된 하위 항목의 인덱스를 나타내며, 보통 nCol과 같은 값을 사용 int CListCtrl::InsertColumn (int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);

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

리스트 컨트롤 클래스 (9/17) 주요 함수 (cont'd) nItem: 항목 인덱스이며 0부터 시작 nSubItem: 하위 항목 인덱스이며 1부터 시작. 0을 사용하면 항목 텍스트 변경 가능 lpszText: 하위 항목(nSubItem>0) 또는 항목(nSubItem=0)에 표시할 텍스트 BOOL CListCtrl::SetItemText (int nItem, int nSubItem, LPCTSTR lpszText);

리스트 컨트롤 클래스 (10/17) 표준 스타일(LVS_*) 변경하기 dwRemove: 제거할 스타일 dwAdd: 추가할 스타일 nFlags: 기본값 사용 BOOL CWnd::ModifyStyle (DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0); // 아이콘 보기로 변경한다. m_list.ModifyStyle(LVS_TYPEMASK, LVS_ICON); // 레이블 편집을 가능하게 한다. m_list.ModifyStyle(0, LVS_EDITLABELS);

리스트 컨트롤 클래스 (11/17) 확장 스타일(LVS_EX_*) 변경하기 dwNewStyle : 새로 적용할 확장 스타일 DWORD CListCtrl::SetExtendedStyle (DWORD dwNewStyle); // 보고서 보기에서 격자 무늬를 표시한다. m_list.SetExtendedStyle(m_list.GetExtendedStyle()| LVS_EX_GRIDLINES); // 보고서 보기에서 항목을 선택하면 줄 전체가 선택되도록 한다. m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT);

리스트 컨트롤 클래스 (12/17) 선택 항목 알아내기 - 마우스 또는 키보드로 새로운 항목을 선택한 경우 메시지 맵을 통해 메시지를 받고, 메시지 핸들러를 통해 내용을 구현 // 메시지맵 ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemchangedList1) // 메시지 핸들러 모양 void CExListCtrlView::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) {…}

리스트 컨트롤 클래스 (14/17) 선택 항목 알아내기 – NMLISTVIEW 구조체 typedef struct tagNMLISTVIEW { NMHDR hdr; // information about message int iItem; // 이벤트를 발생시킨 아이템번호 int iSubItem; // 이벤트를 발생시킨 서브아이템 UINT uNewState; // 발생한 변화 (LVIS_SELECTED) UINT uOldState; // 이전의 상태 UINT uChanged; // 변화된 대상 (LVIF_STATE) POINT ptAction; // 이벤트가 일어난 장소 LPARAM lParam; } NMLISTVIEW, *LPNMLISTVIEW;

리스트 컨트롤 클래스 (13/17) 선택 항목 알아내기 – 메시지 핸들러 void CExListCtrlView::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) { NMLISTVIEW* pNMLV = (NMLISTVIEW*) pNMHDR; if(pNMLV->uChanged & LVIF_STATE) { if(pNMLV->uNewState & (LVIS_SELECTED|LVIS_FOCUSED)) { CString str = m_list.GetItemText(pNMLV->iItem, 0); AfxGetMainWnd()->SetWindowText(str); } *pResult = 0;

리스트 컨트롤 클래스 (16/17) 선택 항목 알아내기 - 선택된 다수 개의 항목을 조사하는 경우 void CExListCtrlView::PrintSelectedItemIndex() { POSITION pos = m_list.GetFirstSelectedItemPosition(); if(pos != NULL) { while(pos) { int nItem = m_list.GetNextSelectedItem(pos); TRACE("항목 %d번이 선택되었습니다.\n", nItem); }

리스트 컨트롤 클래스 (17/17) 항목 추가와 삭제 항목 추가 항목 삭제 CListCtrl::InsertItem() 하나의 항목을 삭제하려면 CListCtrl::DeleteItem(), 모든 항목을 삭제하려면 CListCtrl::DeleteAllItems() 사용 // 첫 번째 항목 삭제 m_list.DeleteItem(0); // 모든 항목 삭제 m_list.DeleteAllItems();

리스트 뷰 (1/3) CListView 클래스 리스트 컨트롤을 이용한 사용자 인터페이스 제공 리스트 컨트롤

리스트 뷰 (2/3) CListView 클래스 사용 예 // 리스트 컨트롤 객체에 대한 참조값(CListCtrl 타입)을 얻는다. CListCtrl& list = GetListCtrl(); // 참조 변수를 이용하여 리스트 컨트롤을 다룬다. list.SetImageList(...); list.InsertColumn(...); ...

리스트 뷰 (3/3) MFC 클래스 계층도

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); }

ANNOUNCEMENT Programming Assignment #4 오늘 (6월4일) 오후 6시 이전에 홈페이지에 올릴 예정 숙제 기한은 6월 13일(토요일) 23시59분까지 제출 방법은 이전과 동일 (리포트 및 코드: 이메일 제출)

Tab Control

탭 컨트롤 (1/3) 탭 컨트롤 동일한 화면 영역에 서로 다른 내용을 표시

탭 컨트롤 (2/3) 탭 컨트롤 스타일

탭 컨트롤 (3/3) 탭 컨트롤 통지 메시지 WM_NOTIFY 통지 메시지 발생 통지 메시지와 더불어 다음과 같은 통지 코드 전달 통지 코드 의미 TCN_SELCHANGING 탭 선택이 변경되기 직전이다. TCN_SELCHANGE 탭 선택이 변경되었다. TCN_KEYDOWN 키를 눌렀다. NM_CLICK 마우스 왼쪽 버튼을 클릭하였다. NM_RCLICK 마우스 오른쪽 버튼을 클릭하였다.

탭 컨트롤 클래스 (1/3) 탭 추가하기 nItem: 탭의 인덱스(0, 1, ...) TCITEM: 하나의 탭에 대한 정보를 가진 구조체 lpszItem: 새로운 탭에 표시할 텍스트(레이블) nImage: 탭에 표시할 이미지(이미지 리스트 인덱스값) LONG CTabCtrl::InsertItem (int nItem, TCITEM* pTabCtrlItem); LONG CTabCtrl::InsertItem (int nItem, LPCTSTR lpszItem); LONG CTabCtrl::InsertItem (int nItem, LPCTSTR lpszItem, int nImage);

탭 컨트롤 클래스 (2/3) 탭 추가 예 TCITEM tcItem; tcItem.mask = TCIF_TEXT; tcItem.pszText = "Tab #0"; m_tab.InsertItem(0, &tcItem); tcItem.pszText = "Tab #1"; m_tab.InsertItem(1, &tcItem); tcItem.pszText = "Tab #2"; m_tab.InsertItem(2, &tcItem); m_tab.InsertItem(0, "Tab #0"); m_tab.InsertItem(1, "Tab #1"); m_tab.InsertItem(2, "Tab #2");

탭 컨트롤 클래스 (3/3) 탭 선택 변경과 선택된 탭 알아내기 int CTabCtrl::SetCurSel (int nItem); int CTabCtrl::GetCurSel ();

프로그레스 컨트롤 (1/2) 프로그레스 컨트롤 오랜 시간이 걸리는 작업의 진행 상황을 시각적으로 표시하는 용도로 사용

프로그레스 컨트롤 (2/2) 프로그레스 컨트롤 스타일

프로그레스 컨트롤 클래스 범위 설정와 현재 범위 얻기 위치 설정과 현재 위치 얻기 위치값 증감 void CProgressCtrl::SetRange (short nLower, short nUpper); void CProgressCtrl::GetRange (int& nLower, int& nUpper); int CProgressCtrl::SetPos (int nPos); int CProgressCtrl::GetPos (); int CProgressCtrl::OffsetPos (int nPos); int CProgressCtrl::SetStep (int nStep); int CProgressCtrl::StepIt ();