04장 메시지 처리 유형

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

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

윈도우즈 프로그래밍

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

Microsoft PowerPoint - 04windows.ppt

PowerPoint Template

5장 MFC기반 다지기

gnu-lee-oop-kor-lec10-1-chap10

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

MFC 프로그래밍

4장기본프로그래밍2

윈도우즈 프로그래밍

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

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

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

윈도우즈 프로그래밍

윈도우 프로그래밍

PowerPoint Presentation

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

UI TASK & KEY EVENT

게임 기획서 표준양식 연구보고서

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770>

윈도우시스템프로그래밍

윈도우시스템프로그래밍

Microsoft PowerPoint - hci2-lecture1.ppt

PowerPoint 프레젠테이션

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

tiawPlot ac 사용방법

UI TASK & KEY EVENT

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

<4D F736F F F696E74202D203038C0E520C7A5C1D820C4C1C6AEB7D1205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Visual Basic 반복문

Microsoft PowerPoint - hci2-lecture1.ppt

PowerPoint Presentation

슬라이드 1

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

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

윈도우시스템프로그래밍

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Javascript

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

오버라이딩 (Overriding)

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

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

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

Microsoft Word - src.doc

vRealize Automation용 VMware Remote Console - VMware

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Endpoint Protector - Active Directory Deployment Guide

윈도우시스템프로그래밍

설계란 무엇인가?

슬라이드 1

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft Word - hook7.doc

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

PowerPoint 프레젠테이션

슬라이드 1

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

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

DLL(Dynamic Linked Library)

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

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

윈도우시스템프로그래밍

Microsoft PowerPoint - gnu-w06-python_[실습]_day13-turtle-shape

Microsoft Word - hook5.doc

Java ...

슬라이드 1

윈도우 프로그래밍의 개념

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

MVVM 패턴의 이해

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

메뉴얼41페이지-2

Chapter 1. MFC 시작하기

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

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

슬라이드 1

슬라이드 1

Microsoft Word - hook3.doc

PowerPoint Presentation

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

gnu-lee-oop-kor-lec06-3-chap7

<312DBED5BACEBCD328B8D3B8AEB8BB2CB8F1C2F7292DBCF6C1A42E687770>

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

Visual Basic 기본컨트롤

Microsoft PowerPoint - e pptx

PowerPoint 프레젠테이션

Chapter #01 Subject

Microsoft PowerPoint - 06-Chapter09-Event.ppt

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

설계란 무엇인가?

Transcription:

4 장 메시지처리유형 김성영교수 금오공과대학교 컴퓨터공학부

메시지처리유형 윈도우에서발생하는이벤트에대응하는윈도우메시지를처리 2 장및 3 장의실습예제 자식윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 실습 4.2 자식윈도우에서발생한사건유형을구분하여처리 Notification code 처리 실습 4.7 Notification code 의한계를극복하여처리 실습 4.9 SendMessage() 혹은 PostMessage() 를통한메시지처리 실습 4.11 2

실습 4.1 버튼윈도우를포함한프로그램을작성하자. Windows 운영체제가미리만들어둔윈도우클래스를사용하자!! LRESULT CALLBACK WndProc(... ) { static HWND hbtn1; switch( msg ) { case WM_CREATE: hbtn1 = CreateWindow( "BUTTON", "click", WS_VISIBLE WS_CHILD BS_PUSHBUTTON, 0, 0, 100, 100, hwnd, NULL, _hinstance, NULL ); break;... } 3

메시지처리유형 : 두번째 컨트롤윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 컨트롤윈도우 Windows 운영체제가정의해놓은윈도우 4

실습 4.2 유형 II 버튼을클릭하면메시지박스를출력하자. WM_COMMAND 메시지를사용하자!! WM_COMMAND 부모윈도우 컨트롤윈도우 메시지처리후출력 5

실습 4.3 두개의버튼을추가하자. 각버튼에대해서로다른메시지박스를출력하자!! 6

두개이상의컨트롤윈도우구분 (1) WM_COMMAND 메시지의부가정보를통해구분 WM_COMMAND 메시지가발생하는경우 메뉴에서메뉴항목을선택했을때 단축키가눌렸을때 컨트롤윈도우에서부모윈도우에게 notification 코드를보낼때 http://msdn.microsoft.com/ko-kr/library/ms647591(en-us,vs.85).aspx 7

두개이상의컨트롤윈도우구분 (2) WM_COMMAND 부가정보 int wnotifycode = HIWORD( wparam ); int wid = LWORD( wparam ); HWND hwndctl = (HWND)lParam; Message Source wparam (high word) wparam (low word) lparam 메뉴 0 단축키 1 컨트롤 Control-defined notification code Menu identifier (IDM_*) Accelerator identifier (IDM_*) Control identifier 0 0 Handle to the control window http://msdn.microsoft.com/ko-kr/library/ms647591(en-us,vs.85).aspx 8

두개이상의컨트롤윈도우구분 (2) 자식윈도우의식별자 (identifier) 설정 HWND CreateWindow(, HMENU hmenu, ) 9번째인자 (hmenu) WS_POPUP 또는 WS_OVERLAPPED 스타일윈도우 : 메뉴핸들 정수값부여 : 자식윈도우의식별자 hbtn1 = CreateWindow( "BUTTON", "click", WS_VISIBLE WS_CHILD BS_PUSHBUTTON, 0, 0, 100, 100, hwnd, (HMENU)888, _hinstance, NULL ); 9

컨트롤윈도우의종류 스타일 의미 BUTTON COMBOBOX 버튼윈도우 콤보박스윈도우 EDIT 에디트윈도우 ( 키보드입력을통해문자열편집이가능 ) LISTBOX 리스트박스윈도우 ( 문자열목록을가지며선택된문자열표시 ) RichEdit 리치에디트윈도우 ( 에디트윈도우보다풍부한편집기능보유 ) SCROLLBAR 스크롤바윈도우 STATIC 스태틱윈도우 ( 간단한문자열이나사각형출력용도 ) http://msdn.microsoft.com/en-us/library/bb773169(v=vs.85).aspx 10

실습 4.4 버튼과에디트윈도우를추가하자. 참고 에디트윈도우는 WS_BORDER 스타일사용 11

에디트윈도우 문자열편집에필요한다양한키 ( 문자, 방향키등 ) 를사용가능 스타일 ES_AUTOHSCROLL ES_AUTOVSCROLL ES_MULTILINE ES_NUMBER ES_PASSWORD ES_READONLY 의미 라인끝에문자를입력했을때 10문자씩자동으로오른쪽스크롤마지막라인에서엔터키를눌렀을때자동으로아래로스크롤여러라인을가질수있도록설정숫자만입력되도록함입력문자열을모두 * 로표시, 비밀번호입력에사용입력이불가능하고읽기만가능하게설정 에디트윈도우스타일적용 hedt1 = CreateWindow(..., WS_VISIBLE WS_CHILD WS_BORDER ES_AUTOHSCROLL ES_AUTOVSCROLL ES_MULTILINE,... ); 12

실습 4.5 버튼을누르면에디트윈도우의내용을메인윈도우에출력하자. 참고 이전슬라이드의에디트윈도우스타일적용 GetWindowText( ) 함수사용 13

실습 4.6 에디트윈도우에여러줄을입력한경우동일하게출력되 록하자. 힌트 : 기지를발휘하자. 14

NOTIFICATION 코드 컨트롤윈도우는사건의유형을부모윈도우에게통보 노티피케이션 (Notification) 코드사용 WM_COMMAND 메시지의 wparam 으로부터추출 버튼윈도우코드 : BN_* 에디트윈도우코드 : EN_* int wnotifycode; 노티피케이션코드 wnotifycode = HIWORD( wparam ); http://msdn.microsoft.com/en-us/library/bb773169(v=vs.85).aspx 15

실습 4.7 유형 III 첫번째에디트윈도우에문자를입력하면곧바로두번째에디트윈도우에그내용을출력하자. 참고 에디트윈도우의 EN_CHANGE 식별코드사용 16

노티피케이션코드이벤트처리의한계 컨트롤윈도우메시지처리에서필요하다고판단되는것들만일부구현함 예 : BN_CLICKED = WM_LBUTTONDOWN + WM_LBUTTONUP 프로그래머가요구하는모든이벤트유형을다루기에는부족함 17

실습 4.8 마우스가움직일때마우스커서의좌표를메인윈도우에 출력하자. 18

문제점 증상 버튼윈도우내부에서는이벤트처리가안됨 문제점 버튼윈도우의메시지처리함수를확인할수없음 버튼윈도우의 MOUSEMOVE 이벤트처리에대한노티피케이션코드는존재하지않음 19

실습 4.9 유형 IV 버튼윈도우상에서마우스를움직이면부모윈도우영역 에좌표를출력하자. 20

처리단계 1. 기존버튼윈도우메시지처리함수의주소찾기 LONG GetWindowLong( HWND hwnd, int nindex ); 2. 버튼윈도우에대한새로운메시지처리함수작성 3. 새로운함수에서 WM_MOUSEMOVE 메시지처리 4. 기존버튼윈도우메시지처리함수의호출 LRESULT CallWindowProc( WNDPROC lpprevwndfunc, HWND hwnd, UINT Msg, WPARAM wparam, LPARAM lparam ); 5. 기존함수를새로작성한메시지처리함수로대체 LONG SetWindowLong( HWND hwnd, int nindex, LONG dwnewlong ); 21

GetWindowLong / SetWindowLong / CallWindowProc GetWindowLong 본함수는지정된윈도우에대한정보를검색해준다. nindex 는다음과같이정의되어있다. 검색된정보는모두 LONG 으로형 - 변환되어반환되므로필요한형으로형 - 변환한다. 예들들어 nindex 가 GWL_WNDPROC 인경우 WNDPROC 로형 - 변환하여사용한다. SetWindowLong 본함수는 GetWindowLong 의반대로, 값을설정하는데사용된다. 세번째인자에설정값을주는데, 요구하는타입이 LONG 임에주의한다. SetWindowLong 본함수는첫번째인자로호출하고자하는메시지처리함수의주소인자가포함되어있는것만제외하고는기존의 WndProc() 함수와동일하다. 22

실습 4.10 두개의윈도우를생성하고자식윈도우에서마우스를움 직일때현재위치에 X 표시를출력하자. 자식윈도우프로시저에서 WM_MOUSEMOVE 메시지처리 23

실습 4.11 유형 V 부모윈도우에서마우스를움직이면자식윈도우의해당 좌표에 X 표시를출력하자. 24

방법 1. WM_MOUSEMOVE 메시지처리시출력윈도우만자식윈도 우로설정함 25

방법 2. 접근방법 부모윈도우에서이벤트처리및자식윈도우의코드수행 처리방법 부모가자식윈도우프로시저를호출함으로써구현가능 직접호출이불가능하므로부모에서자식윈도우프로시저에메시지를보냄 SendMessage( ) 함수사용 SendMessage( ) LRESULT SendMessage( HWND hwnd, UINT Msg, WPARAM wparam, LPARAM lparam ); 26

실습 4.12 부모윈도우에서의마우스움직임방향과직각으로자식 윈도우에 X 표시를출력하자. 27

메시지전달 SendMessage( ) 특정윈도우프로시저직접호출 PostMessage( ) 메시지를애플리케이션메시지큐에전달 ( 간접호출 ) PostMessage() BOOL PostMessage( HWND hwnd, UINT Msg, WPARAM wparam, LPARAM lparam ); 28

윈도우프로그래밍정리 (HW) 버튼 1, 2, 3 을클릭하면각명령에대한답변을 edit 1 에출력한다. 버튼 4 에서마우스를움직이면파란점을 static 윈도우의비례위치에출력한다. 버튼 4 를클릭하면 static 윈도우에그려진내용을지운다. Edit 2 에문자를입력하면바로 edit 1 의화면에같은내용을출력한다. 부모윈도우를움직이면자식윈도우가따라서움직인다. 부모윈도우의크기를변경하면자식윈도우의가로크기를동일한크기로변경한다. 29