1 / 51

MFC 뷰 클래스의 특징과 용도를 개관한다 . 다양한 뷰 클래스를 다루는 방법을 익힌다 .

MFC 뷰 클래스의 특징과 용도를 개관한다 . 다양한 뷰 클래스를 다루는 방법을 익힌다. 뷰 클래스 종류 (1/2). 뷰 클래스 선택. 뷰 클래스 종류 (2/2). MFC 클래스 계층도. 리스트 뷰 (1/3). CListView 클래스 리스트 컨트롤을 이용한 사용자 인터페이스 제공. 리스트 컨트롤. 리스트 뷰 (2/3). CListView 클래스 사용 예. // 리스트 컨트롤 객체에 대한 참조값 (CListCtrl 타입 ) 을 얻는다 .

Download Presentation

MFC 뷰 클래스의 특징과 용도를 개관한다 . 다양한 뷰 클래스를 다루는 방법을 익힌다 .

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MFC 뷰 클래스의 특징과 용도를 개관한다. 다양한 뷰 클래스를 다루는 방법을 익힌다.

  2. 뷰 클래스 종류 (1/2) • 뷰 클래스 선택

  3. 뷰 클래스 종류 (2/2) • MFC 클래스 계층도

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

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

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

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

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

  9. 리스트 컨트롤 (3/3) • 리스트 컨트롤 스타일

  10. 리스트 컨트롤 클래스 (1/17) • 리스트 컨트롤 생성과 초기화 • CListCtrl 객체 선언 후 CListCtrl::Create()로 리스트 컨트롤 생성 • CImageList 객체 선언 후 CImageList::Create(), CImageList::Add() 등을 이용하여 생성과 초기화 • CListCtrl::SetImageList()로 리스트 컨트롤에서 사용할 이미지 리스트 설정 • CListCtrl::InsertColumn()으로 보고서 보기에서 표시할 헤더 초기화 • CListCtrl::InsertItem()으로 항목 추가 • CListCtrl::SetItemText()로 하위 항목 초기화

  11. 리스트 컨트롤 클래스 (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); // ② CImageList 객체 선언과 이미지 리스트 생성, 초기화 CImageList ilLarge, ilSmall; ilLarge.Create(32, 32, ILC_COLOR4, 1, 1); ilSmall.Create(16, 16, ILC_COLOR4, 1, 1); ilLarge.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); ilSmall.Add(AfxGetApp()->LoadIcon(IDI_ICON1));

  12. 리스트 컨트롤 클래스 (3/17) • 예제 코드 (cont'd) // ③ 이미지 리스트 설정 m_list.SetImageList(&ilLarge, LVSIL_NORMAL); m_list.SetImageList(&ilSmall, LVSIL_SMALL); ilLarge.Detach(); ilSmall.Detach(); // ④ 헤더 초기화 m_list.InsertColumn(0, "이름", LVCFMT_LEFT, 100); m_list.InsertColumn(1, "성적", LVCFMT_LEFT, 100); m_list.InsertColumn(2, "학점", LVCFMT_LEFT, 100);

  13. 리스트 컨트롤 클래스 (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");

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

  15. 리스트 컨트롤 클래스 (6/17) • 주요 함수 (cont'd) • pImageList: 리스트 컨트롤에서 사용할 이미지 리스트 • nImageListType: 이미지 리스트에 포함된 이미지의 용도를 나타내는 상수값 CImageList* CListCtrl::SetImageList (CImageList* pImageList, int nImageListType);

  16. 리스트 컨트롤 클래스 (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);

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

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

  19. 리스트 컨트롤 클래스 (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);

  20. 리스트 컨트롤 클래스 (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);

  21. 리스트 컨트롤 클래스 (12/17) • 선택 항목 알아내기 - 마우스 또는 키보드로 새로운 항목을 선택한 경우 // 메시지맵 ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemchangedList1) // 통지 메시지 핸들러 void CExListCtrlView::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) { NMLISTVIEW* pNMLV = (NMLISTVIEW*)pNMHDR; if(pNMLV->uChanged & LVIF_STATE) { if(pNMLV->uNewState & (LVIS_SELECTED|LVIS_FOCUSED)) {

  22. 리스트 컨트롤 클래스 (13/17) • 선택 항목 알아내기 - 마우스 또는 키보드로 새로운 항목을 선택한 경우 (cont'd) CString str = m_list.GetItemText(pNMLV->iItem, 0); AfxGetMainWnd()->SetWindowText(str); } } *pResult = 0; }

  23. 리스트 컨트롤 클래스 (14/17) • 선택 항목 알아내기 - 마우스로 항목을 더블 클릭한 경우 // 메시지맵 ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1) // 통지 메시지 핸들러 void CExListCtrlView::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) { NMITEMACTIVATE* pNMIA = (NMITEMACTIVATE*)pNMHDR; if(pNMIA->iItem != -1) { CString str = m_list.GetItemText(pNMIA->iItem, 0);

  24. 리스트 컨트롤 클래스 (15/17) • 선택 항목 알아내기 - 마우스로 항목을 더블 클릭한 경우 (cont'd) MessageBox(str); } *pResult = 0; }

  25. 리스트 컨트롤 클래스 (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); } } }

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

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

  28. 트리 뷰 (2/3) • CTreeView 클래스 사용 예 // 트리 컨트롤 객체에 대한 참조값을 얻는다. CTreeCtrl& tree = GetTreeCtrl(); // 참조 변수를 이용하여 트리 컨트롤을 다룬다. tree.SetImageList(...); tree.InsertItem(...); ...

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

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

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

  32. 트리 컨트롤 (3/3) • 트리 컨트롤 스타일

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

  34. 트리 컨트롤 클래스 (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));

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

  36. 트리 컨트롤 클래스 (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);

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

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

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

  40. 트리 컨트롤 클래스 (8/11) • 주요 함수 (cont'd) • hParent: 부모 항목을 나타내는 HTREEITEM 값이다. 루트 항목을 추가할 경우에는 TVI_ROOT를 사용 • hInsertAfter: 항목을 추가할 위치를 나타내며 보통 다음 표의 값 중 하나를 사용. 항목 다음 위치에 추가하고 싶을 경우 그 항목을 나타내는 HTREEITEM 값을 사용

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

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

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

  44. 스크롤 뷰 (1/5) • CScrollView 클래스 • 자동화된 스크롤 기능 제공 • MFC 클래스 계층도

  45. 스크롤 뷰 (2/5) • 주요 함수 • nMapMode: 매핑 모드. MM_ISOTROPIC, MM_ANISOTROPIC을 제외하고 모두 사용 가능 • sizeTotal: 작업 영역의 전체 크기(논리 단위) • sizePage: 페이지 크기(논리 단위) • sizeLine: 한 줄의 크기(논리 단위) void CScrollView::SetScrollSizes (int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault);

  46. 새로운 원점 논리 좌표 원점 이전의 원점 스크롤 뷰 (3/5) • 스크롤 바 위치에 따른 원점 이동

  47. 스크롤 뷰 (4/5) • 스크롤 뷰 출력 void CExScroll1View::OnDraw(CDC* pDC) { pDC->TextOut(20, 20, CString("스크롤 뷰를 연습합니다.")); pDC->Ellipse(1930, 1930, 1980, 1980); } void CExScrollView::MyDraw() { CClientDC dc(this); OnPrepareDC(&dc); // dc를 이용하여 출력한다. }

  48. 스크롤 뷰 (5/5) • 스크롤 최적화 void CExScrollView::OnDraw(CDC* pDC) { CExScrollDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CRect rect; pDC->GetClipBox(&rect); // rect 영역만 다시 그린다. }

  49. HTML 뷰 (1/3) • CHtmlView 클래스 • 웹 브라우저 컨트롤을 기반으로 한 뷰 클래스 • MFC 클래스 계층도

  50. HTML 뷰 (2/3) • 주요 함수

More Related