Presentation is loading. Please wait.

Presentation is loading. Please wait.

Visual C++ Programming Controls

Similar presentations


Presentation on theme: "Visual C++ Programming Controls"— Presentation transcript:

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

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

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

4 Review: 스크롤 바 컨트롤(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);

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

6 코딩연습 다음과 같이 가로, 세로 스크롤바 각각 1개씩을 붙이고, 스크롤바를 움직이면 원의 x와 y의 좌표가 변하는 프로그램을 작성하라.

7 Review: 편집 컨트롤 (1/6) 편집 컨트롤 편집 컨트롤 종류

8 Review: 편집 컨트롤 (2/6) 편집 컨트롤 스타일 편집 컨트롤 스타일 의미 속성 대화상자의 항목
ES_AUTOHSCROLL 줄 끝에 도달하면 자동으로 수평 스크롤 Auto HScroll ES_AUTOVSCROLL 줄 끝에 도달하면 자동으로 수직 스크롤 Auto VScroll ES_CENTER 텍스트를 가운데 정렬 Align text: Centered ES_LEFT 텍스트를 왼쪽 정렬 Align text: Left ES_LOWERCASE 입력된 모든 문자를 소문자로 변환 Lowercase ES_MULTILINE 다중 라인 편집 컨트롤임을 나타냄 Multiline ES_NOHIDESEL 컨트롤이 키보드 포커스를 잃더라도 선택된 텍스트가 계속 반전된 상태로 남아있도록 함 No hide selection ES_NUMBER 숫자만 입력할 수 있다. Number

9 Review: 편집 컨트롤 (3/6) 편집 컨트롤 스타일 (cont'd) 편집 컨트롤 스타일 의미 속성 대화상자의 항목
ES_READONLY 텍스트를 읽기만 가능하다. Read-only ES_RIGHT 텍스트를 오른쪽 정렬한다. Align text: Right ES_UPPERCASE 입력된 모든 문자를 대문자로 변환한다. Uppercase ES_WANTRETURN 다중 라인 편집 컨트롤에만 사용할 수 있으며 이 스타일을 지정하지 않으면 대화상자에서 Enter 키를 이용한 줄바꿈이 되지 않는다. Ctrl+Enter 키를 이용하면 이 스타일과 무관하게 줄바꿈을 할 수 있다. Want return ES_OEMCONVERT 입력된 텍스트가 OEM 문자셋으로 변환되어 편집 컨트롤 내부에 저장 OEM convert ES_PASSWORD 단일 라인 편집 컨트롤에만 사용할 수 있으며 입력된 문자를 *로 표시 Password

10 Review: 편집 컨트롤 (4/6) 편집 컨트롤 통지 메시지 통지 메시지 의미 EN_CHANGE
사용자가 컨트롤의 내용을 변경하면 화면에 컨트롤을 다시 그리는데 그 후에 이 메시지가 발생한다. EN_ERRSPACE 메모리가 부족하다. EN_HSCROLL 사용자가 편집 컨트롤의 수평 스크롤 바를 클릭하였다. EN_KILLFOCUS 키보드 포커스를 잃었다. EN_MAXTEXT 더 이상 문자를 입력할 수 없다. CEdit::SetLimitText 함수로 문자 개수를 제한한 경우나 ES_AUTOHSCROLL, ES_AUTOVSCROLL 등의 스타일을 지정하지 않은 상태에서 줄 끝까지 입력한 경우에 발생한다. EN_SETFOCUS 키보드 포커스를 얻었다. EN_UPDATE 사용자가 컨트롤의 내용을 변경하면 화면에 컨트롤을 다시 그리는데 그 직전에 이 메시지가 발생한다. EN_VSCROLL 사용자가 편집 컨트롤의 수직 스크롤 바를 클릭하였다.

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

12 Review: 편집 컨트롤 (6/6) 텍스트를 변경하거나 입력된 텍스트를 알아내기 입력 가능한 문자열의 길이를 제한하기
각종 편집 작업 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();

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

14 정적 컨트롤 (2/3) Picture Control 사용하기 원하는 그림을 넣어보자 Type을 통해 종류 결정
Frame, Icon, Bitmap, EMF… 원하는 그림을 넣어보자

15 정적 컨트롤 (3/3) 그림을 버튼처럼? SS_NOTIFY 스타일을 설정하면 통지 메시지 발생
STN_CLICKED(클릭), STN_DBLCLK(더블 클릭), STN_DISABLE(비 활성화), STN_ENABLE(활성화)

16 리스트 박스 컨트롤 (1/8) 리스트 박스 컨트롤 종류 속성 대화상자 단일 선택 리스트 박스 다중 선택 리스트 박스

17 리스트 박스 컨트롤 (2/8) 리스트 박스 컨트롤 스타일 의미 리스트 박스 컨트롤 스타일 LBS_DISABLENOSCROLL
LBS_EXTENDEDSEL LBS_HASSTRINGS LBS_MULTICOLUMN 표시할 항목의 개수가 적은 경우에도 수직 스크롤 바가 사라지지 않는다. SHIFT, CTRL 키와 마우스 클릭을 이용한 다중 선택이 가능하다. LBS_OWNERDRAW* 스타일을 지정하지 않을 경우의 디폴트 스타일이며 컨트롤이 문자열을 저장 및 관리한다. 여러 줄(Column)로 구성된 리스트 박스를 생성하며 항목이 많을 경우 수평 스크롤이 가능하다. 속성 대화상자 항목 Disable no scroll Selection: Extended Has strings Multi-column

18 리스트 박스 컨트롤 (3/8) 리스트 박스 컨트롤 스타일 (cont'd) 의미 리스트 박스 컨트롤 스타일 속성 대화상자 항목
LBS_MULTIPLESEL LBS_NODATA LBS_NOINTEGRALHEIGHT LBS_NOREDRAW 마우스 클릭을 이용한 다중 선택이 가능하다. 항목 데이터를 컨트롤이 아닌 부모 윈도우가 유지하며 필요할 때마다 부모 윈도우가 직접 그린다. 항목의 개수가 1000개 이상일 경우에 사용한다. 이 스타일을 지정하지 않으면 항목의 일부가 잘려서 보이지 않는 경우가 발생할 수 있다. 항목에 변화가 생기더라도 리스트 박스 컨트롤을 다시 그리지 않는다. Selection: Multiple 없음 No integral height No redraw

19 리스트 박스 컨트롤 (4/8) 리스트 박스 컨트롤 스타일 (cont'd) 의미 리스트 박스 컨트롤 스타일 속성 대화상자의 항목
LBS_NOSEL LBS_NOTIFY LBS_OWNERDRAWFIXED LBS_OWNERDRAWVARIABLE 항목을 선택할 수 없다. 사용자가 항목을 클릭하거나 더블 클릭하면 부모 윈도우에게 통지 메시지를 보낸다. 부모 윈도우가 리스트 박스 항목을 직접 그리되 항목의 높이가 일정한 경우이다. 부모 윈도우가 리스트 박스 항목을 직접 그리되 항목의 높이가 일정하지 않은 경우이다. Selection: None Notify Owner draw: Fixed Owner draw: Variable

20 리스트 박스 컨트롤 (5/8) 리스트 박스 컨트롤 스타일 (cont'd) 의미 리스트 박스 컨트롤 스타일 속성 대화상자의 항목
LBS_SORT LBS_STANDARD LBS_USETABSTOPS LBS_WANTKEYBOARDINPUT 항목이 문자열인 경우 정렬하여 표시한다. LBS_NOTIFY, LBS_SORT, WS_VSCROLL, WS_BORDER 네 가지 스타일의 조합이다. 이 스타일을 지정하면 항목 문자열에 포함된 탭 문자('\t')를 제대로 처리할 수 있다. 리스트 박스 컨트롤이 키보드 포커스를 가진 상태에서 사용자가 키를 누르면 부모 윈도우가 이를 감지하여 특별한 처리를 할 수 있다. Sort Notify, Sort, Border, Vertical scroll Use tabstops Want key input

21 리스트 박스 컨트롤 (6/8) 리스트 박스 컨트롤 통지 메시지
LBN_DBLCLK, LBN_SELCHANGE, LBN_SELCANCEL 통지 메시지는 LBS_NOTIFY 스타일을 설정해야 발생 통지 메시지 의미 LBN_DBLCLK 사용자가 항목을 더블 클릭하였다. LBN_SELCHANGE 사용자가 선택을 변경하였다. LBN_SELCANCEL 사용자가 선택을 취소하였다. LBN_SETFOCUS 키보드 포커스를 얻었다. LBN_KILLFOCUS 키보드 포커스를 잃었다. LBN_ERRSPACE 메모리가 부족하다.

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

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

24 코딩연습 편집콘트롤과 리스트 박스 콘트롤을 만들고, 편집콘트롤을 통해 리스트박스에 글을 추가하는 프로그램을 만들자


Download ppt "Visual C++ Programming Controls"

Similar presentations


Ads by Google