Chapter 1. MFC 시작하기

Similar documents
MFC 프로그래밍

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 09-CE-7-선과 도형

Visual C++의 개요

5장 MFC기반 다지기

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - 04windows.ppt

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

PowerPoint 프레젠테이션

1장 윈도우 프로그래밍 들어가기

08장 윈도우에서의 그리기

윈도우즈 프로그래밍

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

윈도우시스템프로그래밍

그래픽 프로그래밍

MVVM 패턴의 이해

윈도우 프로그래밍의 개념

untitled

윈도우시스템프로그래밍

04장 메시지 처리 유형

슬라이드 1

Microsoft PowerPoint - CPP_chap3

歯Lecture2.PDF

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770>

PowerPoint Presentation

Microsoft PowerPoint - 09-CE-25-오목게임

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

VISLAB 박제강 1. 시작하기전에영상관련알고리즘을개발하는과정에서작성한프로그램을테스트하고피드백하는작업은빈번하게발생한다. 이때기존콘솔 (Console) 형태로작성된프로그램의경우테스트작업을유동적으로조절할수없기때문에작업의효율이떨어진다. 반면 GUI(Graphical Use

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

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

MFC 프로그래밍

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

PowerPoint Presentation

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

PowerPoint Presentation

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

PowerPoint Presentation

슬라이드 1

PowerPoint Presentation

윈도우시스템프로그래밍

쉽게 풀어쓴 C 프로그래밍

WISHBONE System-on-Chip Interconnection Architecture for Portable IP Cores

Microsoft PowerPoint - Chap12-OOP.ppt

C++ Programming

윈도우 프로그래밍

17장 클래스와 메소드

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - C++ 5 .pptx

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

윈도우시스템프로그래밍

Microsoft PowerPoint - CPP_chap1

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

슬라이드 1

Programming hwp

DLL(Dynamic Linked Library)

Microsoft PowerPoint - hci2-lecture10.ppt

Design Issues

[제1강] 텍스트를 입력하세요

PowerPoint Template

윈도우 프로그래밍의 개념

윈도우즈 프로그래밍

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

제11장 프로세스와 쓰레드

Microsoft PowerPoint - additional08.ppt [호환 모드]

Slide 1

Microsoft PowerPoint - 2강

C++ Programming

Microsoft PowerPoint - Chapter 6.ppt

<4D F736F F F696E74202D203032C0E520C0AFC6BFB8AEC6BC20C5ACB7A1BDBABFCD20C1FDC7D520C5ACB7A1BDBA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

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

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

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

Chapter_02-3_NativeApp

PowerPoint Presentation

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

Programming hwp

JVM 메모리구조

설계란 무엇인가?

C++ 기본문법 정리

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

Slide 1

PowerPoint Template

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 02-Class Review.pptx

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Template

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

제8장 자바 GUI 프로그래밍 II

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

Microsoft Word - hci07-final-answer.doc

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - chap01-C언어개요.pptx

슬라이드 1

초보자를 위한 C# 21일 완성

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

Transcription:

Chapter 1. MFC 시작하기 1. MFC(Microsoft Foundation Class) 개요 2. Visual Studio 2015 프로그램설치하기 3. 마우스클릭프로그램작성 4. 그림그리기프로그램작성 5. 마우스좌표값구하기프로그램작성 1

1.1. MFC 개요 2

1.1.1. C++ 언어 객체지향언어 (Object-Oriented Programming, OOP) C언어의장점과객체지향속성을가지는언어객체지향의기본구성요소 (1) 클래스 (Class) : 같은종류의속성 (Attributed) 와행위 (behavior) 를정의 (2) 객체 (Object) : 자신소유의속성을가지고, 클래스에서정의한행위수행가능 (3) 메서드 (method) : 생성된객체를사용하는방법으로객체에명령을내리는메시지객체지향언어의특징 (1) 추상화 : 불필요한정보는숨기고중요한정보만표현 -> 프로그램간단화 (2) 상속성 : 새로운클래스와기존의클래스의자료와연산이용가능 (3) 캡슐화 : 안전과보안에의해서객체는독립적으로활용가능 (4) 다형성 : 한요소에여러개념을넣은것으로오버라이딩또는오버로딩을의미 (5) 정보은닉 : 캡슐화와유사, 정보를노출시키지않음 3

1.1.2. 윈도우프로그램 GUI(Graphic User Interface: 그래픽사용자인터페이스 ) 를기반으로인터페이스제공여러개의프로그램을동시에실행가능 Multi-Tasking 하나의프로그램을동시에여러기능으로실행가능 Multi-Threading API ( Application Programming Interface) - 윈도우내에포함된내부코드를프로그램개발에이용 - 프로그램을직접설정 / 제어가능 - 필요한부분만을코딩하여사용가능 코딩의양감소 MFC( Microsoft Foundation Class) - C++ 클래스라이브러리의집합체 - API를쉽게접근하기위한함수의집합 - API보다편리하게프로그래밍가능 - 용량이커지고, 세세한부분의프로그래밍한계가단점 4

1.1.3. MFC Class 구성도 1 CObject CCmdTarget CWinApp CWnd CDocument CDocTemplate CFrameWnd CDialog CView CCtrlView CSingleDocTemplate CMultiDocTemplate 5

1.1.4. MFC Class 구성도 2 CObject : 최상위클래스, 기본클래스 CCmdTarget : 명령관련클래스 CWinApp : 프로그램시작 / 종료제어, Application 을생성하는기본클래스 CCDocTemplate : 단일문서와다중문서에관련된클래스 CWnd : 윈도우크기, 위치, 모양등상태를제어하기위한클래스 CDocument: 파일로부터데이터읽고 / 저장 / 입출력에관련된클래스 CView: 데이터가화면에보여지도록처리하는클래스 CFrameWnd : 윈도우외곽경계정의클래스 CDialog : 다이얼로그컨트롤과멤버변수사이데이터교환클래스 6

1.2. Visual Studio 2015 프로그램설치하기 7

1.2.1. Visual Studio 2015 프로그램설치하기 1 https://www.visualstudio.com 입력 Visual Studio 2015 Community 로 Searching 8

1.2.2. Visual Studio 2015 프로그램설치하기 2 https://www.visualstudio.com 에서 Community 2015 버전을무료다운로드 9

1.3. 마우스클릭프로그램 10

1.3.1. 프로그램구성 마우스이벤트를이용한윈도우프로그램마우스왼쪽 / 오른쪽버튼클릭구분인식 [Win32 프로젝트 ] 로프로그램구성프로그램구성요소 6단계 (1) 헤더파일 (2) 메인함수 (3) 윈도우클래스초기화와등록 (4) 윈도우생성 (5) 메시지루프 (6) 윈도우프로시져 11

1.3.2. 윈도우프로시져 switch (message) // 커널에서들어온메시지를 switch 문으로처리 { case WM_CREATE: return 0; case WM_LBUTTONDOWN: MessageBox(hwnd, TEXT(" 마우스의왼쪽버튼을클릭하셨습니다."), TEXT(" 마우스왼쪽버튼클릭!"), MB_OK); return 0; case WM_RBUTTONDOWN: MessageBox(hwnd, TEXT(" 마우스의오른쪽버튼을클릭하셨습니다."), TEXT(" 마우스오른쪽버튼클릭!"), MB_OK); return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 100, 100, str1, lstrlen(str1)); TextOut(hdc, 100, 200, str2, lstrlen(str2)); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } 12

1.3.3. WM_MOUSE 메시지 메시지 WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE WM_MOUSEWHEEL 내용 왼쪽마우스버튼을누를경우왼쪽마우스버튼이뗄경우왼쪽마우스더블클릭할경우오른쪽마우스버튼을누를경우오른쪽마우스버튼을뗄경우오른쪽마우스더블클릭할경우마우스가움직일경우마우스휠이움직일경우 13

1.3.4. GDI Object GDI Object 핸들타입 기능 펜 HPEN 선을생성 브러시 HBRUSH 면을생성 폰트 HFONT 문자출력에사용되는글꼴 비트맵 HBITMAP 미트맵이미지 팔레트 HPALETTE 팔레트 영역 HRGN 영역 14

1.3.5. HBRUSH/HPEN COLOR BLACK_BRUSH GRAY_BRUSH NULL_BRUSH WHITE_BRUSH DKGRAY_BRUSH LTGRAY_BRUSH BLACK_PEN WHITE_PEN NULL_PEN 검정브러시회색브러시투명브러시흰색브러시어두운회색브러시밝은회색브러시검정펜흰색펜투명펜 15

1.3.6. 함수정의 WinMain() 함수 - <window.h> 파일에포함된함수로서, 윈도우어플리케이션에서는 WinMain() 함수가반드시포함되어야프로그램실행 WNDCLASS - 윈도우의여러가지특성을정의하는구조체로서 <window.h> 에정의 WinProc - 메시지가발생할때처리하는메시지처리함수로서 Window Procedure 로서메지시자입력되면윈도우즈에의해호출되서메시지를처리 - 예를들면, WM_CREATE, WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_PAINT, WM_DESTROY 5 개의메시지를처리 TextOut() - 간단한텍스트를출력하는함수 Text() - 문자열상수만포함 16

1.3.7. 프로그램실행결과 왼쪽마우스클릭 오른쪽마우스클릭 17

1.4. 그림그리기프로그램작성 18

1.4.1. 그림그리기프로그램구성 1 마우스를자유롭게움직여서그림작성생성되는윈도우프로그램은 MousePos 변수이용 MousePos 병수로실시간마우스위치좌표탐지마우스위치값을실시간으로지속적으로 update MousePos 변수 - LOWORD(lParam) 에의해서마우스 X좌표값과 HIWORD(lParam) 을의해서마우스 Y좌표값이반환 19

1.4.2. 그림그리기프로그램구성 2 // 윈도우프로시져 LRESULT CALLBACK WndProc(HWND hwnd, UINT imessage, WPARAM wparam, LPARAM lparam) { HDC hdc; PAINTSTRUCT ps; static POINT MousePos; // 마우스 x,y 좌표를저장할변수 static BOOL bdrawing = FALSE; switch (imessage) { case WM_LBUTTONDOWN: MousePos.x = LOWORD(lParam); MousePos.y = HIWORD(lParam); bdrawing = TRUE; SetCapture(hWnd); return 0; 20

1.4.3. 그림그리기프로그램구성 3 case WM_MOUSEMOVE: if (bdrawing == TRUE) { hdc = GetDC(hWnd); MoveToEx(hdc, MousePos.x, MousePos.y, NULL); MousePos.x = LOWORD(lParam); MousePos.y = HIWORD(lParam); LineTo(hdc, MousePos.x, MousePos.y); ReleaseDC(hWnd, hdc); } return 0; case WM_LBUTTONUP: case WM_PAINT: case WM_DESTROY: } 21

1.4.4. 그림그리기프로그램결과 22

1.5. 마우스좌표값구하기 프로그램작성 23

1.5.1. 마우스좌표값구하기프로그램구성 1 MFC 를이용하여마우스좌표값작성 MFC Class Wizard를사용하여멤버함수를생성생성된멤버함수는마우스위치좌표값을 update 멤버함수 (Member Function) / 멤버변수 (Member Variable) - 클래스내부에서정의되고사용되는함수나변수 MFC 응용프로그램 이표시되지않는경우 - [ 템플릿 ]-[Visual C++]-[MFC] 에서 C++ 용 Microsoft Foundation Classes 설치 를선택하여설치해야가능 24

1.5.2. 마우스좌표값구하기프로그램구성 2 클래스위저드 (Class Wizard) 를이용하여 OnDraw() 함수를선택 OnDraw(CDC * pdc) 함수를더블클릭하여다음코드추가 void CMouseMFCView::OnDraw(CDC* /*pdc*/) { CMouseMFCDoc* pdoc = GetDocument( ); ASSERT_VALID(pDoc); if (!pdoc) return; // TODO: 여기에원시데이터에대한그리기코드를추가합니다. CClientDC dc(this); CString strpoint; strpoint.format(_t(" 마우스좌표 (%4d, %4d)"), m_pos.x, m_pos.y); dc.textoutw(0, 0, strpoint); } 25

1.5.3. 마우스좌표값구하기프로그램실행결과 26