Visual C++ Programming Controls 3

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

description

Visual C++ Programming Controls 3. Department of Digital Contents Sang Il Park. Outline. Review Control: Button Controls 3 Static Control Edit Control List Box Control Combo Box Control. Review: Control. ν‘œμ€€ν™”λœ ν˜•νƒœμ™€ νŠΉμ„±μ„ 가진 μœˆλ„μš° μ‚¬μš©μžμ—κ²Œ μž…λ ₯을 λ°›κ±°λ‚˜ 정보λ₯Ό λ³΄μ—¬μ€Œ. Review: 정적 컨트둀. 정적 컨트둀 μ’…λ₯˜ ν…μŠ€νŠΈ - PowerPoint PPT Presentation

Transcript of Visual C++ Programming Controls 3

Page 1: Visual C++ Programming  Controls 3

Visual C++ Programming Controls 3

Department of Digital Contents

Sang Il Park

Page 2: Visual C++ Programming  Controls 3

Outline

β€’ Review– Control: Button

β€’ Controls 3– Static Control– Edit Control– List Box Control– Combo Box Control

Page 3: Visual C++ Programming  Controls 3

3

Review: Control

β€’ ν‘œμ€€ν™”λœ ν˜•νƒœμ™€ νŠΉμ„±μ„ 가진 μœˆλ„μš°β€’ μ‚¬μš©μžμ—κ²Œ μž…λ ₯을 λ°›κ±°λ‚˜ 정보λ₯Ό λ³΄μ—¬μ€Œ

Page 4: Visual C++ Programming  Controls 3

4

Review: 정적 컨트둀

β€’ 정적 컨트둀 μ’…λ₯˜β€“ ν…μŠ€νŠΈβ€“ ν”„λ ˆμž„ ( μƒ‰μœΌλ‘œ μ±„μ›Œμ§€μ§€ μ•Šμ€ μ‚¬κ°ν˜• ),

μ‚¬κ°ν˜• ( μƒ‰μœΌλ‘œ μ±„μ›Œμ§„ μ‚¬κ°ν˜• ), μ•„μ΄μ½˜ , λΉ„νŠΈλ§΅ ,ν–₯μƒλœ λ©”νƒ€νŒŒμΌ (Enhanced Metafile)

Page 5: Visual C++ Programming  Controls 3

5

Review: νŽΈμ§‘ 컨트둀

β€’ νŽΈμ§‘ 컨트둀

β€’ νŽΈμ§‘ 컨트둀 μ’…λ₯˜

Page 6: Visual C++ Programming  Controls 3

Review: νŽΈμ§‘ μ½˜νŠΈλ‘€μ„ μ œμ–΄

β€’ 컨트둀 λ©”μ‹œμ§€λ₯Ό μ£ΌκΈ° μœ„ν•΄μ„œλŠ”β€¦ CEdit νƒ€μž…μ˜ λ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜κ³  컨트둀과 μ—°κ²° 직접 μ—°κ²° (DoDataExchange ν•¨μˆ˜ 이용 ) λ˜λŠ” 컨트둀의 λ³€μˆ˜ μΆ”κ°€ κΈ°λŠ₯을 μ΄μš©ν•˜μ—¬ μžλ™μœΌλ‘œ μΆ”κ°€

Page 7: Visual C++ Programming  Controls 3

7

Review: νŽΈμ§‘ 컨트둀 μ œμ–΄ ν•¨μˆ˜

β€’ ν…μŠ€νŠΈλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ μž…λ ₯된 ν…μŠ€νŠΈλ₯Ό μ•Œμ•„λ‚΄κΈ°

β€’ μž…λ ₯ κ°€λŠ₯ν•œ λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ œν•œν•˜κΈ°

β€’ 각쒅 νŽΈμ§‘ μž‘μ—…

m_edit.SetWindowText(" μ΄ˆκΈ°κ°’μž…λ‹ˆλ‹€ .");CString str; m_edit.GetWindowText(str);

m_edit.SetLimitText(10);

m_edit.Clear();m_edit.Cut();m_edit.Copy();m_edit.Paste();m_edit.Undo();

Page 8: Visual C++ Programming  Controls 3

8

Review: 리슀트 λ°•μŠ€ 컨트둀

β€’ 리슀트 λ°•μŠ€ 컨트둀 μ’…λ₯˜

β€’ 속성 λŒ€ν™”μƒμž

단일 μ„ νƒλ¦¬μŠ€νŠΈ λ°•μŠ€

닀쀑 μ„ νƒλ¦¬μŠ€νŠΈ λ°•μŠ€

Page 9: Visual C++ Programming  Controls 3

9

Review: 리슀트 λ°•μŠ€ 컨트둀 μ œμ–΄ ν•¨μˆ˜

β€’ ν•­λͺ© 좔가와 μ‚­μ œ

β€’ ν•­λͺ© 선택

m_list.AddString(" 사과 ");m_list.DeleteString(3);

// 단일 선택 리슀트 λ°•μŠ€ 컨트둀인 경우m_list.SetCurSel(2);

// 닀쀑 선택 리슀트 λ°•μŠ€ 컨트둀인 경우m_list.SetSel(2);m_list.SetSel(3, FALSE);

Page 10: Visual C++ Programming  Controls 3

10

Review: 리슀트 λ°•μŠ€ 컨트둀 μ œμ–΄ ν•¨μˆ˜

β€’ μ„ νƒλœ ν•­λͺ© μ•Œμ•„λ‚΄κΈ°

// 단일 선택 리슀트 λ°•μŠ€ 컨트둀인 경우int nIndex = m_list.GetCurSel();if(nIndex != LB_ERR){ CString str; m_list.GetText(nIndex, str);}

// 닀쀑 선택 리슀트 λ°•μŠ€ 컨트둀인 경우int nIndex = m_list.GetCaretIndex();if(nIndex != LB_ERR){ CString str; m_list.GetText(nIndex, str);}

Page 11: Visual C++ Programming  Controls 3

Announcement:

β€’ 보강곡고 :– 5 μ›” 29 일 ν† μš”μΌβ€“ μ˜€μ „ 11 μ‹œ 30 λΆ„ ~1 μ‹œ 00 뢄– μž₯μ†Œ : μœ¨κ³‘κ΄€ 304 호 μ‹€μŠ΅μ‹€

Page 12: Visual C++ Programming  Controls 3

12

콀보 λ°•μŠ€ 컨트둀 (1/6)

β€’ 콀보 λ°•μŠ€ 컨트둀 μ’…λ₯˜

λ‹¨μˆœμŠ€νƒ€μΌ

λ“œλžλ‹€μš΄μŠ€νƒ€μΌ

λ“œλžλ‹€μš΄ λ¦¬μŠ€νŠΈμŠ€νƒ€μΌ

νŽΈμ§‘ 컨트둀 정적 컨트둀

λ¦¬μŠ€νŠΈλ°•μŠ€μ»¨νŠΈλ‘€

Page 13: Visual C++ Programming  Controls 3

13

콀보 λ°•μŠ€ 컨트둀 (2/6)

β€’ 속성 λŒ€ν™”μƒμž

Page 14: Visual C++ Programming  Controls 3

14

콀보 λ°•μŠ€ 컨트둀 (3/6)

β€’ 콀보 λ°•μŠ€ 컨트둀 μŠ€νƒ€μΌ

콀보 λ°•μŠ€ 컨트둀 μŠ€νƒ€μΌ

CBS_AUTOHSCROLLCBS_DISABLENOSCROLLCBS_DROPDOWNCBS_DROPDOWNLISTCBS_HASSTRINGSCBS_LOWERCASECBS_NOINTEGRALHEIGHT

CBS_OEMCONVERTCBS_OWNERDRAWFIXEDCBS_OWNERDRAWVARIABLE

CBS_SIMPLECBS_SORTCBS_UPPERCASE

의미

= ES_AUTOHSCROLL= LBS_DISABLENOSCROLLλ“œλžλ‹€μš΄ μŠ€νƒ€μΌλ“œλžλ‹€μš΄ 리슀트 μŠ€νƒ€μΌ= LBS_HASSTRINGS= ES_LOWERCASE= LBS_NOINTEGRALHEIGHT

= ES_OEMCONVERT= LBS_OWNERDRAWFIXED= LBS_OWNERDRAWVARIABLE

λ‹¨μˆœ μŠ€νƒ€μΌ= LBS_SORT= ES_UPPERCASE

속성 λŒ€ν™”μƒμžμ˜ ν•­λͺ©

Auto HScrollDisable no scrollType: DropdownType: Drop ListHas stringsLowercaseNo integral height

OEM convertOwner draw: FixedOwner draw: Variable

Type: SimpleSortUppercase

Page 15: Visual C++ Programming  Controls 3

15

콀보 λ°•μŠ€ 컨트둀 (4/6)

β€’ 콀보 λ°•μŠ€ 컨트둀 톡지 λ©”μ‹œμ§€

톡지 λ©”μ‹œμ§€

CBN_CLOSEUP CBN_DBLCLK

CBN_DROPDOWN CBN_EDITCHANGE CBN_EDITUPDATE CBN_ERRSPACE CBN_KILLFOCUSCBN_SELCHANGE CBN_SELENDCANCEL CBN_SELENDOK CBN_SETFOCUS

의미

리슀트 λ°•μŠ€κ°€ λ‹«ν˜”λ‹€ .μ‚¬μš©μžκ°€ ν•­λͺ©μ„ 더블 ν΄λ¦­ν•˜μ˜€λ‹€ .

리슀트 λ°•μŠ€κ°€ 열리기 직전이닀 .= EN_EDITCHANGE= EN_EDITUPDATEλ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•˜λ‹€ .ν‚€λ³΄λ“œ 포컀슀λ₯Ό μžƒμ—ˆλ‹€ .= LBN_SELCHANGE = LBN_SELENDCANCEL μ‚¬μš©μžκ°€ ν•­λͺ©μ„ μ„ νƒν•˜μ˜€λ‹€ .ν‚€λ³΄λ“œ 포컀슀λ₯Ό μ–»μ—ˆλ‹€ .

μŠ€νƒ€μΌ

λ‹¨μˆœ λ“œλžλ‹€μš΄

λ“œλžλ‹€μš΄ 리슀트

Page 16: Visual C++ Programming  Controls 3

16

콀보 λ°•μŠ€ 컨트둀 (5/6)

β€’ ν•­λͺ© 좔가와 μ‚­μ œ

β€’ μ„ νƒλœ ν•­λͺ© μ•Œμ•„λ‚΄κΈ°

m_combo.AddString(" 사과 ");m_combo.DeleteString(3);

int nIndex = m_combo.GetCursel();if(nIndex != CB_ERR){ CString str; m_combo.GetLBText(nIndex, str);}

Page 17: Visual C++ Programming  Controls 3

17

콀보 λ°•μŠ€ 컨트둀 (6/6)

β€’ μž…λ ₯ κ°€λŠ₯ν•œ λ¬Έμžμ—΄μ˜ 길이 μ œν•œν•˜κΈ°

β€’ 각쒅 νŽΈμ§‘ μž‘μ—…

m_combo.LimitText(10);

m_combo.Clear(); m_combo.Cut();m_combo.Copy();m_combo.Paste();

Page 18: Visual C++ Programming  Controls 3

18

슀크둀 λ°” 컨트둀 (1/3)

β€’ 슀크둀 λ°” μ»¨νŠΈλ‘€β€“ ν™”λ©΄μ˜ 일정 μ˜μ—­μ„ μŠ€ν¬λ‘€ν•˜κ±°λ‚˜ 정해진 λ²”μœ„μ˜ 값을

λ³€κ²½μ‹œν‚€λŠ” μš©λ„λ‘œ μ‚¬μš©

β€’ 슀크둀 λ°” μ½”λ“œ

Page 19: Visual C++ Programming  Controls 3

19

슀크둀 λ°” 컨트둀 (2/3)

β€’ μ£Όμš” ν•¨μˆ˜

멀버 ν•¨μˆ˜ μ—­ν• 

SetScrollRange() 슀크둀 λ°•μŠ€ μœ„μΉ˜κ°’μ˜ μ΅œμ†Œκ°’κ³Ό μ΅œλŒ€κ°’μ„ μ„€μ •ν•œλ‹€ .

SetScrollPos() 슀크둀 λ°•μŠ€μ˜ ν˜„μž¬ μœ„μΉ˜λ₯Ό μ„€μ •ν•œλ‹€ .

GetScrollPos() 슀크둀 λ°•μŠ€μ˜ ν˜„μž¬ μœ„μΉ˜λ₯Ό μ–»λŠ”λ‹€ .

Page 20: Visual C++ Programming  Controls 3

슀크둀 λ°” 컨트둀 (3/3)

β€’ λ°œμƒ λ©”μ‹œμ§€ :

β€’ MessageMap μΆ”κ°€ : 마크둜 ν•¨μˆ˜ μ‚¬μš©β€“ Scroll Bar λŠ” ID 에 상관없이 κ³΅ν†΅λœ λ§ˆν¬λ‘œν•¨μˆ˜μ‚¬μš©

β€’ Event Message Handler μΆ”κ°€

ON_WM_HSCROLL() λ˜λŠ” ON_WM_VSCROLL()ON_WM_HSCROLL() λ˜λŠ” ON_WM_VSCROLL()

void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

void OnVScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

void OnVScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

WM_HSCROLL/ WM_VSCROLLWM_HSCROLL/ WM_VSCROLL

Page 21: Visual C++ Programming  Controls 3

21

슀크둀 λ°” 컨트둀 (4/3)

β€’ WM_HSCROLL/WM_VSCROLL λ©”μ‹œμ§€ ν•Έλ“€λŸ¬

– nSBCodeβ€’ 슀크둀 λ°” μ½”λ“œ

– nPosβ€’ 슀크둀 λ°•μŠ€μ˜ μœ„μΉ˜β€’ 슀크둀 λ°” μ½”λ“œκ°€ SB_THUMBPOSITION λ˜λŠ”

SB_THUMBTRACK 인 κ²½μš°μ—λ§Œ μ‚¬μš©

– pScrollBarβ€’ 슀크둀 λ°” μ»¨νŠΈλ‘€μ„ κ°€λ¦¬ν‚€λŠ” 포인터

void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

void OnVScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

Page 22: Visual C++ Programming  Controls 3

μ½”λ”©μ—°μŠ΅

β€’ λ‹€μŒκ³Ό 같이 νŽΈμ§‘μ½˜νŠΈλ‘€κ³Ό , μŠ€ν¬λ‘€λ°”λ₯Ό 뢙이고 , μŠ€ν¬λ‘€λ°”λ₯Ό 움직이면 νŽΈμ§‘μ½˜νŠΈλ‘€μ— κ·Έ 값을 ν‘œμ‹œν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄ 보자 . – μŠ€ν¬λ‘€λ°”μ˜ λ²”μœ„ (0~100)

Page 23: Visual C++ Programming  Controls 3

Dialog Box

Page 24: Visual C++ Programming  Controls 3

24

κ°œμš” (1/2)

β€’ λŒ€ν™”μƒμžβ€“ λ‹€μ–‘ν•œ μ»¨νŠΈλ‘€μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” μΌμ’…μ˜ μœˆλ„μš°β€“ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›κ±°λ‚˜ 정보λ₯Ό 좜λ ₯

Page 25: Visual C++ Programming  Controls 3

25

κ°œμš” (2/2)

β€’ λŒ€ν™”μƒμž μ’…λ₯˜β€“ λͺ¨λ“œν˜• λŒ€ν™”μƒμž (modal dialog)

β€’ λŒ€ν™”μƒμžλ₯Ό 닫지 μ•ŠμœΌλ©΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 더 이상 진행할 수 μ—†λ‹€ .

– λΉ„ λͺ¨λ“œν˜• λŒ€ν™”μƒμž (modeless dialog)β€’ λŒ€ν™”μƒμžλ₯Ό 닫지 μ•Šλ”λΌλ„ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 계속 진행할 수 있

λ‹€ .

Page 26: Visual C++ Programming  Controls 3

26

λŒ€ν™”μƒμž ν…œν”Œλ¦Ώ (1/3)

β€’ λŒ€ν™”μƒμž ν…œν”Œλ¦Ώβ€“ λŒ€ν™”μƒμž μžμ²΄μ™€ ν¬ν•¨λœ μ»¨νŠΈλ‘€μ— λŒ€ν•œ λͺ¨λ“  정보λ₯Ό

가지고 μžˆλŠ” 이진 데이터– λ¦¬μ†ŒμŠ€λ‘œ μ‹€ν–‰ νŒŒμΌμ— 포함

β€’ λŒ€ν™”μƒμž ν…œν”Œλ¦Ώ μž‘μ„±β€“ λΉ„μ£Όμ–Ό C++ λ¦¬μ†ŒμŠ€ νŽΈμ§‘κΈ°λ‚˜ ν…μŠ€νŠΈ νŽΈμ§‘κΈ°λ₯Ό

μ΄μš©ν•˜μ—¬ λ¦¬μ†ŒμŠ€ 슀크립트 (*.RC) μž‘μ„±β€“ λ¦¬μ†ŒμŠ€ 컴파일러둜 이진 파일 (*.RES) 파일 생성– 링크 κ³Όμ •μ—μ„œ μ‹€ν–‰ νŒŒμΌμ— 포함

Page 27: Visual C++ Programming  Controls 3

27

λŒ€ν™”μƒμž ν…œν”Œλ¦Ώ (2/3)

β€’ λ¦¬μ†ŒμŠ€ 슀크립트 μž‘μ„±

Page 28: Visual C++ Programming  Controls 3

28

λŒ€ν™”μƒμž ν…œν”Œλ¦Ώ (3/3)

β€’ λ¦¬μ†ŒμŠ€ 슀크립트 μž‘μ„± (cont'd)

IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 187, 98STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|

WS_SYSMENUCAPTION "Dialog"FONT 10, "System"BEGIN DEFPUSHBUTTON "OK",IDOK,130,7,50,14 PUSHBUTTON "Cancel",IDCANCEL,130,24,50,14 EDITTEXT

IDC_EDIT1,7,7,117,14,ES_AUTOHSCROLL EDITTEXT

IDC_EDIT2,7,24,117,14,ES_AUTOHSCROLLEND

Page 29: Visual C++ Programming  Controls 3

29

λŒ€ν™”μƒμž νŽΈμ§‘κΈ° (1/4)

β€’ 컨트둀 좔가와 μ‚­μ œβ€“ 컨트둀 (Controls) νˆ΄λ°” 이용

Page 30: Visual C++ Programming  Controls 3

30

λŒ€ν™”μƒμž νŽΈμ§‘κΈ° (2/4)

β€’ 컨트둀 λ°°μΉ˜β€“ λŒ€ν™”μƒμž (Dialog) 툴 λ°” 이용

– Format menu 이용

Page 31: Visual C++ Programming  Controls 3

31

λŒ€ν™”μƒμž νŽΈμ§‘κΈ° (3/4)

β€’ νƒ­ μˆœμ„œβ€“ Tab ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ ν‚€λ³΄λ“œ ν¬μ»€μŠ€κ°€ μ΄λ™ν•˜λŠ” μˆœμ„œβ€“ [Format]->[Tab Order] 메뉴λ₯Ό μ΄μš©ν•˜μ—¬ λ³€κ²½

Page 32: Visual C++ Programming  Controls 3

32

λŒ€ν™”μƒμž νŽΈμ§‘κΈ° (4/4)

β€’ λŒ€ν™”μƒμž 속성

폰트λ₯Ό λ°”κΎΈλ©΄ λŒ€ν™”μƒμžμ™€ λŒ€ν™”μƒμžμ— ν¬ν•¨λœ 컨트둀의 크기가 폰트의 크기에 λΉ„λ‘€ν•΄μ„œ λ³€κ²½λœλ‹€ .폰트λ₯Ό λ°”κΎΈλ©΄ λŒ€ν™”μƒμžμ™€ λŒ€ν™”μƒμžμ— ν¬ν•¨λœ 컨트둀의 크기가 폰트의 크기에 λΉ„λ‘€ν•΄μ„œ λ³€κ²½λœλ‹€ .

Page 33: Visual C++ Programming  Controls 3

33

λͺ¨λ“œν˜• λŒ€ν™”μƒμž (1/4)

β€’ MFC 클래슀 계측도

Page 34: Visual C++ Programming  Controls 3

34

λͺ¨λ“œν˜• λŒ€ν™”μƒμž (1/4)

β€’ λͺ¨λ“œν˜• λŒ€ν™”μƒμž μž‘μ„± μˆœμ„œβ‘  λŒ€ν™”μƒμž λ¦¬μ†ŒμŠ€ μž‘μ„±

Resource View

β‘‘ CDialog ( νŒŒμƒ ) 클래슀 객체 생성 β€’ 이 λ•Œ λŒ€ν™”μƒμž λ¦¬μ†ŒμŠ€ ID λ₯Ό μƒμ„±μžμ˜ 인자둜 λ„˜κ²¨μ€€λ‹€ .

[Project] [add class] menu 이용

β‘’ CDialog::DoModal() ν•¨μˆ˜ 호좜

Page 35: Visual C++ Programming  Controls 3

35

λͺ¨λ“œν˜• λŒ€ν™”μƒμž (2/4)

β€’ CDialog 클래슀 가상 ν•¨μˆ˜

– 호좜 μ‹œμ  : WM_INITDIALOG λ©”μ‹œμ§€ λ°œμƒμ‹œβ€“ μš©λ„ : μ»¨νŠΈλ‘€μ„ μ΄ˆκΈ°ν™”ν•˜κ±°λ‚˜ ν‚€λ³΄λ“œ 포컀슀λ₯Ό λ³€κ²½

– 호좜 μ‹œμ  : IDOK λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œβ€“ μš©λ„ : 컨트둀의 값을 μ½κ±°λ‚˜ κ°’μ˜ 타당성 μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•œ

ν›„ λŒ€ν™”μƒμž μ’…λ£Œ

virtual BOOL CDialog::OnInitDialog ( );

virtual void CDialog::OnOK ( );

Page 36: Visual C++ Programming  Controls 3

36

λͺ¨λ“œν˜• λŒ€ν™”μƒμž (3/4)

β€’ CDialog 클래슀 가상 ν•¨μˆ˜ (cont'd)

– 호좜 μ‹œμ  : IDCANCEL λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œβ€“ μš©λ„ : λŒ€ν™”μƒμž μ’…λ£Œ

virtual void CDialog::OnCancel ( );

Page 37: Visual C++ Programming  Controls 3

37

λͺ¨λ“œν˜• λŒ€ν™”μƒμž (4/4)

β€’ OnOK(), OnCancel() ν•¨μˆ˜ λ‚΄λΆ€ κ΅¬ν˜„

void CDialog::OnOK(){ UpdateData(TRUE); EndDialog(IDOK);}

void CDialog::OnCancel(){ EndDialog(IDCANCEL);}

Page 38: Visual C++ Programming  Controls 3

38

DDX/DDV (1/8)

β€’ λͺ¨λ“œν˜• λŒ€ν™”μƒμž κ΅¬ν˜„

class CMyDialog : public CDialog{ ... CString m_str; int m_color; ...}

Page 39: Visual C++ Programming  Controls 3

39

DDX/DDV (2/8)

β€’ λͺ¨λ“œν˜• λŒ€ν™”μƒμž κ΅¬ν˜„ (cont'd)

BOOL CMyDialog::OnInitDialog() { CDialog::OnInitDialog(); SetDlgItemText(IDC_STR, m_str); SetDlgItemInt(IDC_COLOR, m_color); return TRUE;}

void CMyDialog::OnOK() { GetDlgItemText(IDC_STR, m_str); m_color = GetDlgItemInt(IDC_COLOR); CDialog::OnOK();}

Page 40: Visual C++ Programming  Controls 3

40

DDX/DDV (3/8)

β€’ λ™μž‘ 원리

IDC_STRIDC_COLOR

β‘ β‘‘

λŒ€ν™”μƒμž

m_str m_color

λŒ€ν™”μƒμž 객체

m_str m_color

뷰 객체

IDC_STRIDC_COLOR

β‘’ β‘£

λŒ€ν™”μƒμž

m_str m_color

λŒ€ν™”μƒμž 객체

m_str m_color

뷰 객체

λŒ€ν™”μƒμžκ°€μƒμ„±λ  λ•Œ

OK λ²„νŠΌμ„λˆ„λ₯Ό λ•Œ

Page 41: Visual C++ Programming  Controls 3

41

DDX/DDV (4/8)

β€’ DDX(Dialog Data eXchange)

IDC_STRIDC_COLOR

β‘ β‘‘

λŒ€ν™”μƒμž

m_str m_color

λŒ€ν™”μƒμž 객체

m_str m_color

뷰 객체

IDC_STRIDC_COLOR

β‘’ β‘£

λŒ€ν™”μƒμž

m_str m_color

λŒ€ν™”μƒμž 객체

m_str m_color

뷰 객체

μžλ™ν™” ?

Page 42: Visual C++ Programming  Controls 3

42

DDX/DDV (5/8)

β€’ OnInitDialog(), OnOK() ν•¨μˆ˜ λ‚΄λΆ€ κ΅¬ν˜„

BOOL CDialog::OnInitDialog(){ ... UpdateData(FALSE); ...}

void CDialog::OnOK(){ ... UpdateData(TRUE); ...}

Page 43: Visual C++ Programming  Controls 3

43

DDX/DDV (6/8)

β€’ CWnd::UpdateData() ν•¨μˆ˜ λ‚΄λΆ€ κ΅¬ν˜„

BOOL CWnd::UpdateData(BOOL bSaveAndValidate){ ... CDataExchange dx(this, bSaveAndValidate); DoDataExchange(&dx); ...}

Page 44: Visual C++ Programming  Controls 3

44

DDX/DDV (7/8)

β€’ DDX κ΅¬ν˜„β€“ 컨트둀의 값을 μ €μž₯ν•  λ³€μˆ˜ 선언– DoDataExchange() ν•¨μˆ˜λ₯Ό μžμ‹ μ˜ ν”„λ‘œκ·Έλž¨μ— 맞게

μž¬μ •μ˜β€’ DDX_* 맀크둜 μ‚¬μš©

void CMyDialog::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDialog) DDX_Text(pDX, IDC_STR, m_str); DDX_Text(pDX, IDC_COLOR, m_color); //}}AFX_DATA_MAP}

Page 45: Visual C++ Programming  Controls 3

45

DDX/DDV (8/8)

β€’ DDV(Dialog Data Validation)– λŒ€ν™”μƒμžμ˜ μ»¨νŠΈλ‘€μ— μž…λ ₯ν•œ λ°μ΄ν„°μ˜ 타당성 μ—¬λΆ€λ₯Ό

μžλ™μœΌλ‘œ 검사‒ DDV_* 맀크둜 μ‚¬μš©

void CMyDialog::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDialog) DDX_Text(pDX, IDC_STR, m_str); DDV_MaxChars(pDX, m_str, 10); DDX_Text(pDX, IDC_COLOR, m_color); DDV_MinMaxInt(pDX, m_color, 0, 255); //}}AFX_DATA_MAP}

Page 46: Visual C++ Programming  Controls 3

46

λΉ„ λͺ¨λ“œν˜• λŒ€ν™”μƒμž

β€’ 차이점– CDialog::DoModal() ν•¨μˆ˜ λŒ€μ‹  CDialog::Create()

ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μƒμ„±ν•œλ‹€ .– λŒ€ν™”μƒμžλ₯Ό 닫을 λ•Œ CDialog::EndDialog() ν•¨μˆ˜ λŒ€μ‹ 

CWnd::DestroyWindow() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€ . – λͺ¨λ“œν˜• λŒ€ν™”μƒμž κ°μ²΄λŠ” λŒ€κ°œ μŠ€νƒμ— μƒμ„±ν•˜μ§€λ§Œ λΉ„

λͺ¨λ“œν˜• λŒ€ν™”μƒμž κ°μ²΄λŠ” νž™μ— μƒμ„±ν•œλ‹€ .

Page 47: Visual C++ Programming  Controls 3

47

λŒ€ν™”μƒμž 기반 μ‘μš© ν”„λ‘œκ·Έλž¨ (1/2)

β€’ λŒ€ν™”μƒμž 기반 μ‘μš© ν”„λ‘œκ·Έλž¨β€“ λŒ€ν™”μƒμžκ°€ 메인 μœˆλ„μš° 역할을 ν•˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨

Page 48: Visual C++ Programming  Controls 3

48

λŒ€ν™”μƒμž 기반 μ‘μš© ν”„λ‘œκ·Έλž¨ (2/2)

β€’ InitInstance() ν•¨μˆ˜

BOOL CSimpleCalcApp::InitInstance(){ CSimpleCalcDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) {

} else if (nResponse == IDCANCEL) {

} return FALSE;}

Page 49: Visual C++ Programming  Controls 3

49

곡톡 λŒ€ν™”μƒμž (1/10)

β€’ MFC 클래슀 계측도

Page 50: Visual C++ Programming  Controls 3

50

곡톡 λŒ€ν™”μƒμž (2/10)

β€’ MFC 곡톡 λŒ€ν™”μƒμž 클래슀

MFC 클래슀 μš©λ„ API ν•¨μˆ˜

CColorDialog 색상 선택 ChooseColor

CFileDialog 파일 μ—΄κΈ° λ˜λŠ” μ €μž₯ GetOpenFileName, GetSaveFileNameCFindReplaceDialo

gμ°ΎκΈ° λ˜λŠ” λ°”κΎΈκΈ° FindText,

ReplaceTextCFontDialog 폰트 선택 ChooseFont

CPageSetupDialog 페 이 지 μ„€ μ • ( 페 이 지 크 κΈ° , λ°© ν–₯ , 페 이 지 μ—¬λ°± λ“± )

PageSetupDlg

CPrintDialog 인 쇄 μ„€ μ • ( ν”„ λ¦° ν„° , 인쇄 λ²”μœ„ λ“± )

PrintDlg

CPrintDialogEx (>MFC 7.0)

인 쇄 μ„€ μ • ( ν”„ λ¦° ν„° , 인쇄 λ²”μœ„ λ“± )

PrintDlgEx (>μœˆλ„μš° 2000)

MFC 클래슀 μš©λ„ API ν•¨μˆ˜

Page 51: Visual C++ Programming  Controls 3

51

곡톡 λŒ€ν™”μƒμž (3/10)

β€’ CColorDialog

CColorDialog dlg;dlg.DoModal();COLORREF color = dlg.GetColor();

CColorDialog dlg(RGB(255, 0, 0), CC_FULLOPEN);dlg.DoModal();COLORREF color = dlg.GetColor();

Page 52: Visual C++ Programming  Controls 3

52

곡톡 λŒ€ν™”μƒμž (4/10)

β€’ CFileDialog

CFileDialog dlg(TRUE);if(dlg.DoModal() == IDOK) MessageBox(dlg.GetPathName());

CFileDialog dlg(FALSE);if(dlg.DoModal() == IDOK) MessageBox(dlg.GetPathName());

Page 53: Visual C++ Programming  Controls 3

53

곡톡 λŒ€ν™”μƒμž (5/10)

β€’ CFindReplaceDialog– μ‚¬μš© 방법은 ꡐ재 μ°Έμ‘°

Page 54: Visual C++ Programming  Controls 3

54

곡톡 λŒ€ν™”μƒμž (6/10)

β€’ CFontDialog

CFontDialog dlg;if(dlg.DoModal() == IDOK){ CClientDC dc(this); // 화면을 μ§€μš΄λ‹€ . CRect rect; GetClientRect(&rect); dc.SelectStockObject(WHITE_PEN); dc.SelectStockObject(WHITE_BRUSH); dc.Rectangle(&rect); // μ„ νƒλœ 색상을 μ•Œμ•„λ‚Έλ‹€ . COLORREF color = dlg.GetColor(); dc.SetTextColor(color);

Page 55: Visual C++ Programming  Controls 3

55

곡톡 λŒ€ν™”μƒμž (7/10)

β€’ CFontDialog (cont'd)

// μ„ νƒλœ 폰트λ₯Ό μ•Œμ•„λ‚Έλ‹€ . LOGFONT lf; dlg.GetCurrentFont(&lf); CFont font; font.CreateFontIndirect(&lf); dc.SelectObject(&font); // ν…μŠ€νŠΈλ₯Ό 좜λ ₯ν•œλ‹€ . dc.TextOut(10, 10, CString(" ν•œκΈ€ & English"));}

Page 56: Visual C++ Programming  Controls 3

56

곡톡 λŒ€ν™”μƒμž (8/10)

β€’ CPageSetupDialog

CPageSetupDialog dlg;dlg.DoModal();

Page 57: Visual C++ Programming  Controls 3

57

곡톡 λŒ€ν™”μƒμž (9/10)

β€’ CPrintDialog

CPrintDialog dlg(TRUE);dlg.DoModal();

CPrintDialog dlg(FALSE);dlg.DoModal();

Page 58: Visual C++ Programming  Controls 3

58

곡톡 λŒ€ν™”μƒμž (10/10)

β€’ CPrintDialogEx

// stdafx.h νŒŒμΌμ—μ„œ WINVER μƒμˆ˜κ°’μ„ 0x0500 μ΄μƒμœΌλ‘œ μ •μ˜ν•œλ‹€ .

// ( 예 ) #define WINVER 0x0500

CPrintDialogEx dlg;dlg.DoModal();