윈도우 프로그래밍의 개념

Similar documents
윈도우 프로그래밍의 개념

Microsoft PowerPoint - hci2-lecture11.ppt

Microsoft PowerPoint - hci2-lecture11.ppt

윈도우 프로그래밍의 개념

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

윈도우 프로그래밍의 개념

그래픽 프로그래밍

윈도우시스템프로그래밍

DLL(Dynamic Linked Library)

Programming hwp

Microsoft PowerPoint - CPP_chap7_dialogbox(2)

PowerPoint Template

윈도우시스템프로그래밍

윈도우시스템프로그래밍

윈도우즈프로그래밍(1)

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Chapter #01 Subject

슬라이드 1

Microsoft PowerPoint - Java7.pptx

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Visual C++의 개요

Microsoft Word - src.doc

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

윈도우시스템프로그래밍

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다.

PowerPoint Presentation

Lab 3. 실습문제 (Single linked list)_해답.hwp

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

Microsoft PowerPoint _대화상자.ppt

chap 5: Trees

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

KNK_C_05_Pointers_Arrays_structures_summary_v02

설계란 무엇인가?

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Chapter 4. LISTS

Microsoft PowerPoint - chap06-1Array.ppt

쉽게 풀어쓴 C 프로그래밍

Programming hwp

Frama-C/JESSIS 사용법 소개

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - C++ 5 .pptx

03_queue

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

04장 메시지 처리 유형

Visual Basic Visual Basic 소개

<4D F736F F F696E74202D203038C0E520C7A5C1D820C4C1C6AEB7D1205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint Presentation

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

K&R2 Reference Manual 번역본

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

Programming hwp

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

슬라이드 1

PowerPoint 프레젠테이션

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Microsoft PowerPoint - chap06-2pointer.ppt

1장. 유닉스 시스템 프로그래밍 개요

슬라이드 1

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

C 언어 프로그래밊 과제 풀이

Visual Basic 반복문

슬라이드 1

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

Microsoft PowerPoint - hci2-lecture9.ppt

11장 포인터

슬라이드 1

Programming hwp

Microsoft PowerPoint - CPP_chap3

금오공대 컴퓨터공학전공 강의자료

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

4S 1차년도 평가 발표자료

Microsoft PowerPoint 웹 연동 기술.pptx

MFC 프로그래밍

슬라이드 1

adfasdfasfdasfasfadf

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

Chap 6: Graphs

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

5장 MFC기반 다지기

중간고사

untitled

06장.리스트

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Transcription:

제 8 장컨트롤과리소스 II 8.1 탭컨트롤 8.2 슬라이더컨트롤실습 8-1 도형의종류와색상출력하기 8.3 스핀컨트롤 8.4 프로그레스바컨트롤 8.5 IP 주소컨트롤 8.6 네트워크주소컨트롤 8.7 날짜 / 시간컨트롤 8.8 애니메이트컨트롤실습 8.2 데이터전송시뮬레이터작성하기

컨트롤및리소스 리스트컨트롤 (List Control) 트리컨트롤 (Tree Control) 탭컨트롤 (Tab Control) 슬라이드컨트롤 (Slider Control) 스핀컨트롤 (Spin Control) 프로그레스바컨트롤 (Progress Bar Control) IP 주소컨트롤 (IP Address Control) 네트워크주소컨트롤 (Network Address Control) 날짜 / 시간컨트롤 (Date Time Picker) 애니메이트컨트롤 (Animate Control)

탭컨트롤 탭컨트롤은정보를분류하고자할때사용 주어진탭을선택함에따라해당하는정보를분류하여보여준다. 작은대화상자안에많은정보를표현하고자할때많이사용된다.

슬라이더컨트롤 슬라이드컨트롤은주어진범위의값이나비연속적인값을입력하고자할때사용 주어진범위안에서마우스를드래그함으로써값을증가, 감소할수있게하는컨트롤이다.

슬라이더컨트롤 슬라이더컨트롤의주요멤버함수 SetRange() 함수 슬라이더컨트롤의상, 하위범위를설정하는함수 SetRange(int nmin, int nmax, BOOL bredraw=false); GetPos() 함수 슬라이더컨트롤의현재위치를반환하는함수 SetPos(int npos) 함수 슬라이더컨트롤의위치를설정하는함수

스핀컨트롤 스핀컨트롤 스핀컨트롤은두개의작은화살표버튼으로구성되어일정한범위의값을입력할때사용 화살표방향은스타일설정에따라변할수있다. 버디컨트롤 일반적으로에디트박스에붙여서사용하는경우가많다. 이런경우를버디컨트롤이라한다.

실습 8-1 도형의종류와색상을대화상자에출력하기 Tab Control 을이용해도형선택항목과색상선택항목을분류하며, Slider Control 을이용해빨강, 청록, 파랑각각의색상을선택하는인터페이스를제작한다. 버디컨트롤을이용하여도형의크기를조절한다. 선택된도형을각각의색상을조합하여대화상자에도형을출력해보는프로그램을작성해보자.

실습 8-1 도형의종류와색상을대화상자에출력하기

TC_ITEM 구조체 탭컨트롤의아이템을삽입하거나얻어올때사용하는구조체 구조체의원형 Typedef struct tagtcitem { Unit mask; // 얻거나설정하기위한유효한마스크 DWORD dwstate; // 탭컨트롤아이템의현재상태표시 DWORD dwstatemask; // dwstate 멤버인비트를명시 LPTSTR psztext; // 텝아이템에나타나는문자열 Int cchtextmax; // psztext의버퍼의크기 Int iimage; // 탭컨트롤이미지리스트의인텍스 LPARAM lparam // 데이터애플리케이션 } TCITEM, FAR *LPTCTIEM;

실습 8-1 프로그램작성순서 프로그램작성순서 1) 대화상자기반의프로젝트를생성한다 2) 대화상자에컨트롤을배치하고속성을설정한다. Picture 컨트롤, Tab 컨트롤, 라디오버튼, 슬라이더컨트롤, 에디트컨트롤, 스핀컨트롤등 3) 각컨트롤들을멤버변수에연결한다. 클래스마법사사용 ( 멤버변수 Tab) Tab 컨트롤, 슬라이더컨트롤, 에디트박스

실습 8-1 프로그램작성순서 4) 대화상자클래스에멤버변수를추가한다. 도형의종류를저장하기위한변수 도형의색상을저장하기위한변수 5) 각컨트롤들을초기화한다. OnInitDialog() 함수에서처음보여질탭과컨트롤들을초기화한다. 6) 탭컨트롤에대한메시지핸들러함수를만든다. 탭선택에따라적당한컨트롤들을보여지게한다. 7) 도형선택을위해라디오버튼에대한메시지핸들러함수를만든다.

실습 8-1 프로그램작성순서 8) 도형을그린다. OnPaint() 함수에도형을그리는코딩을한다. 9) 색상선택을위한슬라이더컨트롤에대한메시지핸들러함수를만든다. 10) 크기조정을위한버디컨트롤을대한핸들러함수를만든다. 11) 각컨트롤들을재배치한다. 12) 프로그램을실행시킨다.

실습 8-1 실행결과

프로그레스바컨트롤 프로그레스바컨트롤은어떤작업의진행상황을표현하는데유용하게사용된다. 다른컨트롤같이임의의데이터입력에는사용될수없다. 이컨트롤은작업의진행상황을시각적으로표현해줌으로써사용자에게다른작업을할시간을준다.

IP 주소컨트롤 IP 주소컨트롤 인터넷프로토콜 (IP) 형식의주소만입력가능 세자릿수의네개의필드로구성 0 ~ 255 까지만입력가능 각필드입력시세자리가채워지면자동으로우측필드로이동

네트워크주소컨트롤 윈도우비스타이상의운영체제에서만사용되는컨트롤 IPv4, IPv6, URL 숫자주소를입력할수있게형식을고정하지않았음 사용자가주소가잘못입력되면검사하여문제가있으면사용자에게알려줌

날짜 / 시간선택컨트롤 날짜 / 시간선택컨트롤은직관적으로특정날짜를선택하는컨트롤 인터페이스는콤보박스와유사하나컨트롤을확장하면특정날짜를지정할수있는 Month Calendar 컨트롤이표시된다. Short Date 형식 Long Date 형식 Time 형식

애니메이트컨트롤 애니메이트컨트롤은 AVI 동영상파일을재생하고제어하는데사용된다. AVI 파일이란 RLE(Run-Length Encoding) 을사용해압축한파일과압축하지않은파일두가지이다. 애니메이트컨트롤은사운드를지원하지않는다.

실습 8-2 데이터전송시뮬레이터작성하기 이번실습에서는 IP 주소를입력하기위해 IP Address Control 을사용하고전송날짜를제어하기위해 Date Time Picker Control 을이용하게된다. 또한데이터전송값을입력하기위해 Buddy control 을사용하고, Progress Bar Control 을이용하여전송진행률을표현하는프로그램을작성하는것이다.

실습 8-2 프로그램작성순서 1) 대화상자기반의프로젝트를생성한다. 2) 대화상자에컨트롤을배치하고속성을설정한다. IP Address 컨트롤, Progress Bar 컨트롤, Date Time Picker 컨트롤, Buddy 컨트롤, Edit Control 3) 각컨트롤을멤버변수와연결한다. 클래스마법사사용 ( 멤버변수 Tab) IP Address, Progress Bar, Date Time Picker, Edit Control

실습 8-2 프로그램작성순서 4) 대화상자클래스에멤버변수를선언한다. 데이터전송율을저장하기위한변수 5) 컨트롤을초기화한다. OnInitDialog() 함수에서프로그레스바를초기화한다. 6) 데이터전송에관한함수를만든다. 데이터전송시작버튼에대한메시지핸들러함수를만든다. 데이터전송상황을업데이트할수있도록타이머함수를작성한다.

실습 8-2 프로그램작성순서 전송할데이터크기를증가또는감소하기위한스핀컨트롤에대한함수를작성한다. 7) 프로그램을실행시킨다.

실습 8-2 실행결과

연습문제 8-1 여러가지컨트롤을이용하여, 사용자로부터원의확대 / 축소비율을입력받아, 그비율에따른애니메이션을수행하는프로그램을작성하도록한다.

연습문제 8-1 실행예

BOOL CExercise8_1Dlg::OnInitDialog() m_bsameratio = TRUE; m_nhorizontal = 50; m_nvertical = 50; m_ncurhscale = 50; m_ncurvscale = 50; m_sliderhorizontal.setrange(0, 100); m_slidervertical.setrange(0, 100); m_sliderhorizontal.setpos(50); m_slidervertical.setpos(50); m_prgsscale.setrange(0, 100); m_sliderscale.setrange(0, 100); m_prgsscale.setpos(0); m_sliderscale.setpos(0); UpdateData(FALSE); ((CButton*) GetDlgItem(IDC_CHECK_SAME_RATIO))->SetCheck(TRUE); return TRUE; // 포커스를컨트롤에설정하지않으면 TRUE 를반환합니다. } { { } { } void CExercise8_1Dlg::OnSysCommand(UINT nid, LPARAM lparam) if ((nid & 0xFFF0) == IDM_ABOUTBOX) CAboutDlg dlgabout; dlgabout.domodal(); else CDialogEx::OnSysCommand(nID, lparam);

void CExercise8_1Dlg::OnPaint() CRect rectview, rectfigure; GetDlgItem(IDC_STATIC_VIEW)->GetWindowRect(&rectView); CPoint ptcenter = rectview.centerpoint(); ScreenToClient(&ptCenter); rectfigure.left = ptcenter.x - (int)(rectview.width()/2.0 * m_ncurhscale/100.0); rectfigure.right = ptcenter.x + (int)(rectview.width()/2.0 * m_ncurhscale/100.0); rectfigure.top = ptcenter.y - (int)(rectview.height()/2.0 * m_ncurvscale/100.0); rectfigure.bottom = ptcenter.y + (int)(rectview.height()/2.0 * m_ncurvscale/100.0); CClientDC dc(this); CBrush NewBrush, *oldbrush; NewBrush.CreateSolidBrush(RGB(255,0,0)); oldbrush = dc.selectobject(&newbrush); dc.ellipse(&rectfigure); dc.selectobject(oldbrush); NewBrush.DeleteObject();

void CExercise8_1Dlg::OnClickedCheckSameRatio() UpdateData(TRUE); { { m_bsameratio =!m_bsameratio; if (m_bsameratio) if (m_ncurhscale > m_ncurvscale) m_nhorizontal = m_sliderhorizontal.getpos(); m_nvertical = m_nhorizontal; } { else m_nvertical = m_slidervertical.getpos(); m_nhorizontal = m_nvertical; } m_ncurhscale = m_nhorizontal; m_ncurvscale = m_nvertical; m_slidervertical.setpos(m_nvertical); m_sliderhorizontal.setpos(m_nvertical); UpdateData(FALSE); } m_prgsscale.setpos(0); m_sliderscale.setpos(0); Invalidate();

void CExercise8_1Dlg::OnClickedButtonScale() UpdateData(TRUE); m_nanihscale = 0; m_nanivscale = 0; { if (m_nhorizontal >= m_nvertical) m_prgsscale.setrange(0, m_nhorizontal); m_sliderscale.setrange(0, m_nhorizontal); } { else m_prgsscale.setrange(0, m_nvertical); m_sliderscale.setrange(0, m_nvertical); } SetTimer(1, 30, NULL); GetDlgItem(IDC_BUTTON_SCALE)->EnableWindow(FALSE); UpdateData(FALSE); Invalidate();

void CExercise8_1Dlg::OnTimer(UINT_PTR nidevent) UpdateData(TRUE); CRect rectview, rectfigure; GetDlgItem(IDC_STATIC_VIEW)->GetWindowRect(&rectView); ScreenToClient(&rectView); { { if (m_nhorizontal >= m_nvertical) if (m_nanihscale!= m_nhorizontal) m_nanihscale++; m_nanivscale=(int)((float)m_nanihscale * ((float)m_nvertical/ (float)m_nhorizontal)); m_ncurhscale = m_nanihscale; m_ncurvscale = m_nanivscale; } m_prgsscale.setpos(m_ncurhscale); m_sliderscale.setpos(m_ncurhscale);

void CExercise8_1Dlg::OnTimer(UINT_PTR nidevent) { } } { { else KillTimer(1); GetDlgItem(IDC_BUTTON_SCALE)->EnableWindow(TRUE); else if (m_nanivscale!= m_nvertical) m_nanivscale++; m_nanihscale++; m_nanihscale=(int)((float)m_nanivscale * ((float)m_nhorizontal/ (float)m_nvertical)); m_ncurhscale = m_nanihscale; m_ncurvscale = m_nanivscale; } { m_prgsscale.setpos(m_ncurvscale); m_sliderscale.setpos(m_ncurvscale); else KillTimer(1); GetDlgItem(IDC_BUTTON_SCALE)->EnableWindow(TRUE); } } UpdateData(FALSE); InvalidateRect(&rectView);

void CExercise8_1Dlg::OnHScroll(UINT nsbcode, UINT npos, CScrollBar* pscrollbar) CRect rectview; GetDlgItem(IDC_STATIC_VIEW)->GetWindowRect(&rectView); ScreenToClient(&rectView); if( pscrollbar->getsafehwnd() == m_sliderhorizontal.m_hwnd ) { { } { } if(m_bsameratio == TRUE) m_ncurhscale = m_sliderhorizontal.getpos(); m_ncurvscale = m_sliderhorizontal.getpos(); m_slidervertical.setpos(m_ncurhscale); else m_ncurhscale = m_sliderhorizontal.getpos(); m_ncurvscale = m_slidervertical.getpos(); m_nhorizontal = m_ncurhscale; m_nvertical = m_ncurvscale; m_prgsscale.setpos(0); m_sliderscale.setpos(0); } UpdateData(FALSE); InvalidateRect(&rectView);

void CExercise8_1Dlg::OnHScroll(UINT nsbcode, UINT npos, CScrollBar* pscrollbar) else if( pscrollbar->getsafehwnd() == m_slidervertical.m_hwnd ) { { } { } if(m_bsameratio == TRUE) m_ncurhscale = m_slidervertical.getpos(); m_ncurvscale = m_slidervertical.getpos(); m_sliderhorizontal.setpos(m_ncurhscale); else m_ncurhscale = m_sliderhorizontal.getpos(); m_ncurvscale = m_slidervertical.getpos(); m_nhorizontal = m_ncurhscale; m_nvertical = m_ncurvscale; m_prgsscale.setpos(0); m_sliderscale.setpos(0); } UpdateData(FALSE); InvalidateRect(&rectView); else if( pscrollbar->getsafehwnd() == m_sliderscale.m_hwnd ) { if (m_nhorizontal >= m_nvertical)

void CExercise8_1Dlg::OnHScroll(UINT nsbcode, UINT npos, CScrollBar* pscrollbar) { m_prgsscale.setrange(0, m_nhorizontal); m_sliderscale.setrange(0, m_nhorizontal); m_ncurhscale = m_sliderscale.getpos(); m_ncurvscale = (int)((float)m_ncurhscale * ((float)m_nvertical/ (float)m_nhorizontal)); m_prgsscale.setpos(m_ncurhscale); } { else m_prgsscale.setrange(0, m_nvertical); m_sliderscale.setrange(0, m_nvertical); m_ncurvscale = m_sliderscale.getpos(); m_ncurhscale = (int)((float)m_ncurvscale * ((float)m_nhorizontal/ (float)m_nvertical)); m_prgsscale.setpos(m_ncurvscale); } } UpdateData(FALSE); InvalidateRect(&rectView); else return;