<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

Similar documents
MFC 프로그래밍

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt

5장 MFC기반 다지기

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

Microsoft PowerPoint - 04windows.ppt

윈도우 프로그래밍

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770>

Chapter 1. MFC 시작하기

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

PowerPoint 프레젠테이션

<312DBED5BACEBCD328B8D3B8AEB8BB2CB8F1C2F7292DBCF6C1A42E687770>

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

윈도우즈 프로그래밍

Microsoft PowerPoint - hci2-lecture3.ppt

유저영역후킹탐지시스템 팀 명 : D.N.F (Do Not Fishing) 지도교수 : 유승재교수님 팀 장 : 신동순 팀 원 : 서현찬이치목 중부대학교정보보호학과

Microsoft PowerPoint - hci2-lecture3.ppt

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

예제와 함께 배워보는 OllyDbg사용법

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

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

윈도우시스템프로그래밍

<4D F736F F F696E74202D203036C0E520BBE7BFEBC0DA20C0CEC5CDC6E4C0CCBDBA205BC8A3C8AF20B8F0B5E55D>

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

2014 년정보보호졸업작품보고서 파일유출방지시스템 지도교수님 : 양환석교수님 팀명 : LKC Security 팀원 : 이호영, 김상우, 최유택 중부대학교정보보호학과

untitled

04장 메시지 처리 유형

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

C++ Programming

Microsoft PowerPoint - CPP_chap3

Microsoft PowerPoint - CPP_chap1

슬라이드 1

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

DLL(Dynamic Linked Library)

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

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

Microsoft Word - hci07-final-answer.doc

C++ Programming

Microsoft PowerPoint - hci2-lecture6.ppt

그래픽 프로그래밍

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

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

Programming hwp

Microsoft PowerPoint - hci2-lecture7.ppt

Chapter #01 Subject

Microsoft PowerPoint - 09-CE-24-채팅 프로그램

Microsoft PowerPoint - CSharp-10-예외처리

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

PowerPoint Template

Microsoft PowerPoint - 04-UDP Programming.ppt

설계란 무엇인가?

Visual C++의 개요

IS119_Message.Hooking_이성재.hwp

Microsoft PowerPoint - hci2-lecture10.ppt

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

歯Lecture2.PDF

<4D F736F F F696E74202D203032C0E520C0AFC6BFB8AEC6BC20C5ACB7A1BDBABFCD20C1FDC7D520C5ACB7A1BDBA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

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

Microsoft PowerPoint - hci2-lecture6.ppt

쉽게 풀어쓴 C 프로그래밍

윈도우시스템프로그래밍

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

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

슬라이드 1

Chapter_02-3_NativeApp

JAVA PROGRAMMING 실습 08.다형성

윈도우즈 프로그래밍

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

슬라이드 1

슬라이드 1

Network Programming

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

Microsoft PowerPoint - C++ 5 .pptx

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

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

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

쉽게 풀어쓴 C 프로그래밍

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

Design Issues

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

Microsoft PowerPoint - MFC-교재.ppt

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

개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API

슬라이드 1

MFC 프로그래밍

Programming hwp

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

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

PowerPoint Presentation

PowerPoint Presentation

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

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Presentation

Microsoft PowerPoint - 07-Data Manipulation.pptx

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

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

Transcription:

01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다.

윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1

윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기 시스템메시지대기열 응용프로그램메시지대기열 #3 처리 응용프로그램메시지대기열 #2 처리 응용프로그램메시지대기열 #1 2

윈도우운영체제특징 (3/3) 멀티태스킹 여러개의응용프로그램을수행 멀티스레딩 하나의응용프로그램에여러개의실행흐름을생성 Ex) 하나의응용프로그램이사용자가마우스나키보드로입력한내용을처리하면서동시에맞춤법검사루틴을수행 3

윈도우응용프로그램특징 (1/4) API 호출문집합 API(Application Programming g Interface): 윈도우운영체제가응용프로그램을위해제공하는각종함수집합 응용프로그램 call API#1 call API#2... call API#3 call API#4... call API#n 4

윈도우응용프로그램특징 (2/4) 메시지핸들러집합 메시지핸들러 (Message Handler): 메시지를받았을때동작을결정하는코드 응용프로그램... 메시지핸들러 #1 메시지핸들러 #2 메시지핸들러 #3 메시지핸들러 #4 메시지핸들러 #5 메시지핸들러 #6... 윈도우프로시저 : 메시지핸들러집합 5

윈도우응용프로그램특징 (3/4) 실행파일과 DLL 집합 DLL(Dynamic-Link Library): 프로그램이실행중에호출할수있는함수 ( 코드 ) 와리소스 응용프로그램 실행파일 DLL #1 DLL #2 DLL #3 DLL #4 DLL #5... 6

윈도우응용프로그램특징 (4/4) 장치독립적 응용프로그램 API 장치드라이버주변장치 7

윈도우응용프로그램개발도구 (1/3) SDK(Software Development Kit) C 언어로윈도우 API 를직접호출해서프로그램을구현 장점 API 를직접다루기때문에세부적인제어가가능하고, 윈도우운영체제가제공하는모든기능을사용할수있다. 생성코드의크기가작고속도가빠르다. 단점 생산성이낮다. 8

윈도우응용프로그램개발도구 (2/3) RAD(Rapid Application Development) 시각적으로화면을디자인하고코드를추가하는방법으로프로그램을빠르게개발 장점 생산성이높다. 단점 일반적으로생성코드의크기가크고실행속도가느리다. 운영체제가제공하는모든기능을활용한세부적인제어가어렵다. 9

윈도우응용프로그램개발도구 (3/3) 클래스라이브러리 (Class Library) 윈도우응용프로그램개발에필수적인기능을객체지향언어를이용하여클래스로제공 MFC(Microsoft Foundation Class Library) 장점 SDK보다생산성이높다. RAD보다생성코드의크기가작고실행속도가빠르다. 단점 초기학습에필요한기간이길다. 객체지향언어 클래스라이브러리구조와기능, 각클래스의관계파악 10

HelloSDK 예제작성 (1/8) 프로젝트생성 11

HelloSDK 예제작성 (2/8) 옵션설정 12

HelloSDK 예제작성 (3/8) 코드입력 #include <windows.h> // WinMain( ) 함수에서참조하므로함수원형을선언한다. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { // 윈도우클래스를초기화하고운영체제에등록한다. wndclass.style = CS_HREDRAW CS_VREDRAW; wndclass.lpfnwndproc = WndProc; wndclass.cbclsextra = 0; wndclass.cbwndextra = 0; wndclass.hinstance = hinstance; 13

HelloSDK 예제작성 (4/8) wndclass.hicon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hcursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrbackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszmenuname = NULL; wndclass.lpszclassname = "HelloClass"; if(!registerclass(&wndclass)) return -1; // 윈도우를생성하고화면에보이게한다. hwnd = CreateWindow("HelloClass", "HelloSDK Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance, NULL); // 윈도우가화면에나타나게하며 ncmdshow의값에따라최소화혹은최대화상태로실행 ShowWindow(hwnd, ncmdshow); // 윈도우프로시저가 WM_PAINT 메시지를곧바로처리하게함으로, // 클라이언트영역이빨리화면에그려지게하는역할 UpdateWindow(hwnd); 14

HelloSDK 예제작성 (5/8) } // 메시지대기열에서메시지를하나씩꺼내처리한다. while(getmessage(&msg, NULL, 0, 0) > 0){ TranslateMessage(&msg); // 키보드메시지처리 DispatchMessage(&msg); // 해당메시지를윈도우프로시저에게보내는역할 } return msg.wparam; LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { HDC hdc; PAINTSTRUCT ps; char *str = "Hello, SDK"; 15

HelloSDK 예제작성 (6/8) // 메시지종류에따라응용프로그램이적절히처리한다. switch(message) { case WM_CREATE: return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 100, 100, str, lstrlen(str)); EndPaint(hwnd, &ps); return 0; case WM_LBUTTONDOWN: MessageBox(hwnd, " 마우스를클릭했습니다.", " 마우스메시지 ", MB_OK); return 0; 16

HelloSDK 예제작성 (7/8) case WM_DESTROY: PostQuitMessage(0); return 0; } } // 응용프로그램이처리하지않으면윈도우운영체제가처리한다. return DefWindowProc(hwnd, message, wparam, lparam); 17

HelloSDK 예제작성 (8/8) 실행화면 18

HelloSDK 예제분석 (1/7) 헤더파일 #include <windows.h> 메인함수 int APIENTRY WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) {... 19

HelloSDK 예제분석 (2/7) 윈도우클래스초기화와등록 wndclass.style = CS_HREDRAW CS_VREDRAW; wndclass.lpfnwndproc = WndProc; wndclass.cbclsextra = 0; wndclass.cbwndextra = 0; wndclass.hinstance = hinstance; wndclass.hicon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hcursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrbackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszmenuname lpszmenuname = NULL; wndclass.lpszclassname = "HelloClass"; if(!registerclass(&wndclass)) return -1; 20

HelloSDK 예제분석 (3/7) 윈도우생성 hwnd = CreateWindow("HelloClass", "HelloSDK Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance, NULL); ShowWindow(hwnd, ncmdshow); UpdateWindow(hwnd); 21

HelloSDK 예제분석 (4/7) 메시지루프 while(getmessage(&msg, NULL, 0, 0) > 0){ TranslateMessage(&msg); DispatchMessage(&msg); g } return msg.wparam; 22

HelloSDK 예제분석 (5/7) 윈도우프로시저 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { HDC hdc; PAINTSTRUCT ps; char *str = "Hello, SDK"; // 메시지종류에따라응용프로그램이적절히처리한다. switch(message) { case WM_CREATE: // CreateWindow() 함수호출, 윈도우가생성될때, 한번만받는메시지 return 0; case WM_PAINT: // 윈도우클라이언트영역의일부또는전체를다시그릴필요가있을때메시지를보낸다. hdc = BeginPaint(hwnd, &ps); 23

HelloSDK 예제분석 (6/7) TextOut(hdc, 100, 100, str, lstrlen(str)); EndPaint(hwnd, &ps); return 0; case WM_LBUTTONDOWN: MessageBox(hwnd, " 마우스를클릭했습니다.", " 마우스메시지 ", MB_OK); return 0; case WM_DESTROY: } // 윈도우가파괴될때한번만호출 PostQuitMessage(0);// 자신의메시지대기열에 WM_QUIT 메시지를집어넣음. return 0; } // 응용프로그램이처리하지않으면윈도우운영체제가처리한다. return DefWindowProc(hwnd, message, wparam, lparam); 24

HelloSDK 분석 (7/7) 요약 이벤트발생응용프로그램 #1... 메시지루프 시스템메시지대기열 응용프로그램메시지대기열 #3 응용프로그램메시지대기열 #2 윈도우프로시저 메시지핸들러 #1 메시지핸들러 #2 메시지핸들러 #3... 응용프로그램메시지대기열 #1 DefWindowProc 25

HelloMFC 예제작성 (1/8) 프로젝트생성 26

HelloMFC 예제작성 (2/8) 1 단계옵션설정 27

HelloMFC 예제작성 (3/8) 코드입력 #include <afxwin.h> // 클래스선언부 class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); }; class CMainFrame : public CFrameWnd { public: CMainFrame(); 28

HelloMFC 예제작성 (4/8) protected: afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nflags, CPoint point); DECLARE_MESSAGE_MAP() }; // 응용프로그램객체 CHelloApp theapp; // 클래스정의부 BOOL CHelloApp::InitInstance() { m_pmainwnd = new CMainFrame; m_pmainwnd pmainwnd->showwindow(m_ncmdshow); ncmdshow); 29

HelloMFC 예제작성 (5/8) } m_pmainwnd->updatewindow(); return TRUE; CMainFrame::CMainFrame() { Create(NULL, "HelloMFC Application"); } void CMainFrame::OnPaint() { char *msg = "Hello, MFC"; CPaintDC dc(this); 30

HelloMFC 예제작성 (6/8) } dc.textout(100, 100, msg, lstrlen(msg)); void CMainFrame::OnLButtonDown(UINT nflags, CPoint point) { MessageBox(" 마우스를클릭했습니다.", " 마우스메시지 "); } // 메시지맵 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_PAINT() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() MAP() 31

HelloMFC 예제작성 (7/8) 프로젝트설정변경 32

HelloMFC 예제작성 (8/8) 실행화면 33

HelloMFC 예제분석 (1/7) 헤더파일 #include <afxwin.h> 클래스선언부 class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); }; 34

HelloMFC 예제분석 (2/7) 클래스선언부 (cont d) class CMainFrame : public CFrameWnd { public: CMainFrame(); protected: afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nflags, CPoint point); DECLARE_MESSAGE_MAP() MAP() }; 35

HelloMFC 예제분석 (3/7) 응용프로그램객체 CHelloApp theapp; MFC 응용프로그램의구조 하나의응용프로그램객체 여러종류의클래스선언및정의 36

HelloMFC 예제분석 (4/7) 클래스정의부 BOOL CHelloApp::InitInstance() { m_pmainwnd = new CMainFrame; m_pmainwnd->showwindow(m_ncmdshow); Wi d dsh m_pmainwnd->updatewindow(); return TRUE; } CMainFrame::CMainFrame() { Create(NULL, "HelloMFC Application"); } 37

HelloMFC 예제분석 (5/7) 클래스정의부 (cont d) void CMainFrame::OnPaint() { char *msg = "Hello, MFC"; CPaintDC dc(this); } dc.textout(100, 100, msg, lstrlen(msg)); void CMainFrame::OnLButtonDown(UINT nflags, CPoint point) { MessageBox(" 마우스를클릭했습니다.", " 마우스메시지 "); } 38

HelloMFC 예제분석 (6/7) 메시지맵 BEGIN_MESSAGE_MAP(CMainFrame, MAP(CM CFrameWnd) ON_WM_PAINT() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() 39

HelloMFC 예제분석 (7/7) 요약 WinMain( i ) // MFC 의내부에숨겨진프로그램실행의시작점 { // ptr은포인터로서응용프로그램객체의주소값을가지고있다.... ptr->initinstance( ); // 초기화 : 프레임윈도우객체를생성한다. // 프레임윈도우객체의생성자에서 // 실제윈도우가만들어진다. ptr->run( ); // 메시지루프 : 프레임윈도우에게메시지를보낸다. // 프레임윈도우가받은메시지의종류에따라 // 해당메시지핸들러가적절히호출된다. ptr->exitinstance( ); // 종료 : 각종청소작업을수행한다.... } 40