Visual C++ Programming Controls 3

Slides:



Advertisements
Similar presentations
1/29 키보드로 직접 입력할 수 없는 다양한 기호와 한자를 입력하는 방법을 알아 보자. 또한 블록으로 영역을 설정하는 여러 가지 방법에 대해 살펴본 후 블록 으로 설정된 내용을 복사하여 붙여넣거나, 잘라내고 이동하는 방법에 대해서 도 알아보자. 02_ 문서의 입력과 편집.
Advertisements

1 11 장 MDI 와 멀티미디어. 2 MDI 단일 문서 인터페이스 (SDI, Single Document Interface)  윈도에 있는 메모장이나 워드 패드와 같이 단지 하나의 폼으 로 이루어져 있는 프로그램 다중 문서 인터페이스 (MDI, Multiple Document.
Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.
윈도우 프로그래밍 실습 김 창 헌.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Visual C++ Programming Dialog Box
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
컨트롤의 동작 원리를 이해한다. 표준 컨트롤의 다양한 속성과 통지 메시지를 이해한다.
Kim Yeon Hee 제4_1장 대화상자 Kim Yeon Hee
제4장 대화상자.
대화 상자기반 응용프로그램을 연습한다. 공통 대화상자를 다루는 방법을 배운다.. Chapter 06. 공통 대화상자 Section 01 공통 대화상자 클래스 Section 02 색상 대화상자 Section 03 파일 대화상자 Section 04 폰트 대화상자.
1. 신뢰할 수 있는 싸이트 등록 인터넷 익스플로러 실행 후 실행
Power Java 제3장 이클립스 사용하기.
다이얼로그 박스와 컨트롤 컴퓨터 계측 및 실습.
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
윤 홍 란 다이알로그(대화상자) 윤 홍 란
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
Visual C++ Programming Controls and CList
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Visual C++ Programming Controls - Buttons
마우스(Mouse) 다루기 컴퓨터응용 및 실습 I.
제4장 대화상자 4.1 CDialogEx 클래스 4.2 대화상자 기반의 프로그램 실습 4-1 MFC 기본 컨트롤 사용법 익히기
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Visual C++ Programming Common Controls
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
Visual C++ Programming Output and File
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Visual C++ Programming Controls
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
11장. 1차원 배열.
13. 연산자 오버로딩.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
4. 대화상자와 Resource 최 영 석.
홀인원2.0 설치 메뉴얼.
- CPC 초기화면의 2, 3번을 참조하여 인터넷 옵션을 변경한다. (상세화면은 다음페이지 참조)
영상처리 실습 인공지능연구실.
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
24장. 파일 입출력.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
※ 인터넷 옵션 조치 방법 ※ ★ 신뢰사이트 등록 (1) ★ 우리들을 신뢰해주세요^^* 방법이 복잡해 보일지 모르지만
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
Chapter 03 윈도 폼 컨트롤 1.
DK-128 개발환경 설정 아이티즌 기술연구소
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
메뉴(Menu) 컴퓨터응용 및 실습 I.
컨트롤, 프로퍼티, 이벤트.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
CHAP 5. 메뉴와 대화상자.
7 생성자 함수.
6 객체.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
BoardGame 보드게임 따라가기.
Presentation transcript:

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

Outline Review Controls 3 Control: Button Static Control Edit Control List Box Control Combo Box Control

Review: Control 표준화된 형태와 특성을 가진 윈도우 사용자에게 입력을 받거나 정보를 보여줌

Review: 정적 컨트롤 정적 컨트롤 종류 텍스트 프레임(색으로 채워지지 않은 사각형), 사각형(색으로 채워진 사각형), 아이콘, 비트맵, 향상된 메타파일(Enhanced Metafile)

Review: 편집 컨트롤 편집 컨트롤 편집 컨트롤 종류

Review: 편집 콘트롤을 제어 컨트롤 메시지를 주기 위해서는…  CEdit 타입의 변수를 추가하고 컨트롤과 연결 직접 연결 (DoDataExchange 함수 이용) 또는 컨트롤의 변수 추가 기능을 이용하여 자동으로 추가

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

Review: 리스트 박스 컨트롤 리스트 박스 컨트롤 종류 속성 대화상자 단일 선택 리스트 박스 다중 선택 리스트 박스

Review: 리스트 박스 컨트롤 제어 함수 항목 추가와 삭제 항목 선택 m_list.AddString("사과"); m_list.DeleteString(3); // 단일 선택 리스트 박스 컨트롤인 경우 m_list.SetCurSel(2); // 다중 선택 리스트 박스 컨트롤인 경우 m_list.SetSel(2); m_list.SetSel(3, FALSE);

Review: 리스트 박스 컨트롤 제어 함수 선택된 항목 알아내기 // 단일 선택 리스트 박스 컨트롤인 경우 int nIndex = m_list.GetCurSel(); if(nIndex != LB_ERR){ CString str; m_list.GetText(nIndex, str); } // 다중 선택 리스트 박스 컨트롤인 경우 int nIndex = m_list.GetCaretIndex();

Announcement: 보강공고: 5월 29일 토요일 오전 11시30분~1시00분 장소: 율곡관 304호 실습실

콤보 박스 컨트롤 (1/6) 콤보 박스 컨트롤 종류 편집 컨트롤 정적 컨트롤 리스트 박스 컨트롤 단순 스타일 드랍다운 스타일 드랍다운 리스트 스타일

콤보 박스 컨트롤 (2/6) 속성 대화상자

콤보 박스 컨트롤 (3/6) 콤보 박스 컨트롤 스타일 콤보 박스 컨트롤 스타일 의미 속성 대화상자의 항목 CBS_AUTOHSCROLL = ES_AUTOHSCROLL Auto HScroll CBS_DISABLENOSCROLL = LBS_DISABLENOSCROLL Disable no scroll CBS_DROPDOWN 드랍다운 스타일 Type: Dropdown CBS_DROPDOWNLIST 드랍다운 리스트 스타일 Type: Drop List CBS_HASSTRINGS = LBS_HASSTRINGS Has strings CBS_LOWERCASE = ES_LOWERCASE Lowercase CBS_NOINTEGRALHEIGHT = LBS_NOINTEGRALHEIGHT No integral height CBS_OEMCONVERT = ES_OEMCONVERT OEM convert CBS_OWNERDRAWFIXED = LBS_OWNERDRAWFIXED Owner draw: Fixed CBS_OWNERDRAWVARIABLE = LBS_OWNERDRAWVARIABLE Owner draw: Variable CBS_SIMPLE 단순 스타일 Type: Simple CBS_SORT = LBS_SORT Sort CBS_UPPERCASE = ES_UPPERCASE Uppercase

콤보 박스 컨트롤 (4/6) 콤보 박스 컨트롤 통지 메시지 통지 메시지 의미 CBN_CLOSEUP CBN_DBLCLK CBN_DROPDOWN CBN_EDITCHANGE CBN_EDITUPDATE CBN_ERRSPACE CBN_KILLFOCUS CBN_SELCHANGE CBN_SELENDCANCEL CBN_SELENDOK CBN_SETFOCUS 의미 리스트 박스가 닫혔다. 사용자가 항목을 더블 클릭하였다. 리스트 박스가 열리기 직전이다. = EN_EDITCHANGE = EN_EDITUPDATE 메모리가 부족하다. 키보드 포커스를 잃었다. = LBN_SELCHANGE = LBN_SELENDCANCEL 사용자가 항목을 선택하였다. 키보드 포커스를 얻었다. 스타일 단순 드랍다운 드랍다운 리스트   

콤보 박스 컨트롤 (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); }

콤보 박스 컨트롤 (6/6) 입력 가능한 문자열의 길이 제한하기 각종 편집 작업 m_combo.LimitText(10); m_combo.Clear(); m_combo.Cut(); m_combo.Copy(); m_combo.Paste();

스크롤 바 컨트롤 (1/3) 스크롤 바 컨트롤 스크롤 바 코드 화면의 일정 영역을 스크롤하거나 정해진 범위의 값을 변경시키는 용도로 사용 스크롤 바 코드

스크롤 바 컨트롤 (2/3) 주요 함수 멤버 함수 역할 SetScrollRange() 스크롤 박스 위치값의 최소값과 최대값을 설정한다. SetScrollPos() 스크롤 박스의 현재 위치를 설정한다. GetScrollPos() 스크롤 박스의 현재 위치를 얻는다.

스크롤 바 컨트롤(3/3) 발생 메시지: MessageMap 추가: 마크로 함수 사용 Scroll Bar는 ID에 상관없이 공통된 마크로함수사용 Event Message Handler 추가 WM_HSCROLL/ WM_VSCROLL ON_WM_HSCROLL() 또는 ON_WM_VSCROLL() void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); void OnVScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

스크롤 바 컨트롤 (4/3) WM_HSCROLL/WM_VSCROLL 메시지 핸들러 nSBCode nPos pScrollBar 스크롤 바 코드 nPos 스크롤 박스의 위치 스크롤 바 코드가 SB_THUMBPOSITION 또는 SB_THUMBTRACK인 경우에만 사용 pScrollBar 스크롤 바 컨트롤을 가리키는 포인터 void OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); void OnVScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

코딩연습 다음과 같이 편집콘트롤과, 스크롤바를 붙이고, 스크롤바를 움직이면 편집콘트롤에 그 값을 표시하는 프로그램을 만들어 보자. 스크롤바의 범위 (0~100)

Dialog Box

개요 (1/2) 대화상자 다양한 컨트롤을 포함하고 있는 일종의 윈도우 사용자로부터 입력을 받거나 정보를 출력

개요 (2/2) 대화상자 종류 모드형 대화상자 (modal dialog) 비 모드형 대화상자 (modeless dialog) 대화상자를 닫지 않으면 응용 프로그램이 더 이상 진행할 수 없다. 비 모드형 대화상자 (modeless dialog) 대화상자를 닫지 않더라도 응용 프로그램이 계속 진행할 수 있다.

대화상자 템플릿 (1/3) 대화상자 템플릿 대화상자 템플릿 작성 대화상자 자체와 포함된 컨트롤에 대한 모든 정보를 가지고 있는 이진 데이터 리소스로 실행 파일에 포함 대화상자 템플릿 작성 비주얼 C++ 리소스 편집기나 텍스트 편집기를 이용하여 리소스 스크립트(*.RC) 작성 리소스 컴파일러로 이진 파일(*.RES) 파일 생성 링크 과정에서 실행 파일에 포함

대화상자 템플릿 (2/3) 리소스 스크립트 작성

대화상자 템플릿 (3/3) 리소스 스크립트 작성 (cont'd) IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 187, 98 STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU CAPTION "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_AUTOHSCROLL END

대화상자 편집기 (1/4) 컨트롤 추가와 삭제 컨트롤(Controls) 툴바 이용

대화상자 편집기 (2/4) 컨트롤 배치 대화상자(Dialog) 툴 바 이용 Format menu 이용

대화상자 편집기 (3/4) 탭 순서 Tab 키를 눌렀을 때 키보드 포커스가 이동하는 순서 [Format]->[Tab Order] 메뉴를 이용하여 변경

대화상자 편집기 (4/4) 대화상자 속성 폰트를 바꾸면 대화상자와 대화상자에 포함된 컨트롤의 크기가 폰트의 크기에 비례해서 변경된다.

모드형 대화상자 (1/4) MFC 클래스 계층도

모드형 대화상자 (1/4) 모드형 대화상자 작성 순서 ① 대화상자 리소스 작성  Resource View ② CDialog (파생) 클래스 객체 생성 이 때 대화상자 리소스 ID를 생성자의 인자로 넘겨준다.  [Project] [add class] menu 이용 ③ CDialog::DoModal() 함수 호출

모드형 대화상자 (2/4) CDialog 클래스 가상 함수 호출 시점: WM_INITDIALOG 메시지 발생시 용도: 컨트롤을 초기화하거나 키보드 포커스를 변경 호출 시점: IDOK 버튼을 누를 때 용도: 컨트롤의 값을 읽거나 값의 타당성 여부를 검사한 후 대화상자 종료 virtual BOOL CDialog::OnInitDialog ( ); virtual void CDialog::OnOK ( );

모드형 대화상자 (3/4) CDialog 클래스 가상 함수 (cont'd) 호출 시점: IDCANCEL 버튼을 누를 때 용도: 대화상자 종료 virtual void CDialog::OnCancel ( );

모드형 대화상자 (4/4) OnOK(), OnCancel() 함수 내부 구현 void CDialog::OnOK() { UpdateData(TRUE); EndDialog(IDOK); } void CDialog::OnCancel() EndDialog(IDCANCEL);

DDX/DDV (1/8) 모드형 대화상자 구현 class CMyDialog : public CDialog { ... CString m_str; int m_color; }

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

DDX/DDV (3/8) 동작 원리 IDC_STR IDC_COLOR ① ② 대화상자 m_str m_color 대화상자 객체 뷰 객체 ③ ④ 대화상자가 생성될 때 OK 버튼을 누를 때

DDX/DDV (4/8) DDX(Dialog Data eXchange) IDC_STR IDC_COLOR ① ② 대화상자 m_str m_color 대화상자 객체 뷰 객체 ③ ④ 자동화?

DDX/DDV (5/8) OnInitDialog(), OnOK() 함수 내부 구현 BOOL CDialog::OnInitDialog() { ... UpdateData(FALSE); } void CDialog::OnOK() UpdateData(TRUE);

DDX/DDV (6/8) CWnd::UpdateData() 함수 내부 구현 BOOL CWnd::UpdateData(BOOL bSaveAndValidate) { ... CDataExchange dx(this, bSaveAndValidate); DoDataExchange(&dx); }

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 }

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 }

비 모드형 대화상자 차이점 CDialog::DoModal() 함수 대신 CDialog::Create() 함수를 이용하여 생성한다. 대화상자를 닫을 때 CDialog::EndDialog() 함수 대신 CWnd::DestroyWindow() 함수를 호출한다. 모드형 대화상자 객체는 대개 스택에 생성하지만 비 모드형 대화상자 객체는 힙에 생성한다.

대화상자 기반 응용 프로그램 (1/2) 대화상자 기반 응용 프로그램 대화상자가 메인 윈도우 역할을 하는 응용 프로그램

대화상자 기반 응용 프로그램 (2/2) InitInstance() 함수 BOOL CSimpleCalcApp::InitInstance() { CSimpleCalcDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { return FALSE;

공통 대화상자 (1/10) MFC 클래스 계층도

공통 대화상자 (2/10) MFC 공통 대화상자 클래스 MFC 클래스 용도 API 함수 CColorDialog 색상 선택 ChooseColor CFileDialog 파일 열기 또는 저장 GetOpenFileName, GetSaveFileName CFindReplaceDialog 찾기 또는 바꾸기 FindText, ReplaceText CFontDialog 폰트 선택 ChooseFont CPageSetupDialog 페이지 설정(페이지 크기, 방향, 페이지 여백 등) PageSetupDlg CPrintDialog 인쇄 설정(프린터, 인쇄 범위 등) PrintDlg CPrintDialogEx (>MFC 7.0) PrintDlgEx (>윈도우 2000)

공통 대화상자 (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();

공통 대화상자 (4/10) CFileDialog CFileDialog dlg(TRUE); if(dlg.DoModal() == IDOK) MessageBox(dlg.GetPathName()); CFileDialog dlg(FALSE); if(dlg.DoModal() == IDOK) MessageBox(dlg.GetPathName());

공통 대화상자 (5/10) CFindReplaceDialog 사용 방법은 교재 참조

공통 대화상자 (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);

공통 대화상자 (7/10) CFontDialog (cont'd) // 선택된 폰트를 알아낸다. LOGFONT lf; dlg.GetCurrentFont(&lf); CFont font; font.CreateFontIndirect(&lf); dc.SelectObject(&font); // 텍스트를 출력한다. dc.TextOut(10, 10, CString("한글 & English")); }

공통 대화상자 (8/10) CPageSetupDialog CPageSetupDialog dlg; dlg.DoModal();

공통 대화상자 (9/10) CPrintDialog CPrintDialog dlg(TRUE); dlg.DoModal(); CPrintDialog dlg(FALSE); dlg.DoModal();

공통 대화상자 (10/10) CPrintDialogEx // stdafx.h 파일에서 WINVER 상수값을 0x0500 이상으로 정의한다. // (예) #define WINVER 0x0500 CPrintDialogEx dlg; dlg.DoModal();