SlideShare a Scribd company logo
1 of 14
Download to read offline
CHAP. 13
사용자 메시지 처리
1
nonezero@kumoh.ac.kr
2
프로그래머가 메시지 정의하고
필요할 때 발생시킬 수 있다
나만의 메시지를 만들자
메시지 처리 유형 Ⅴ
굳이 유형으로 분류 하자면
3
실습
동일한 크기의 윈도우를 두 개 만들고,
부모 윈도우에서 마우스 움직이면
자식 윈도우의 동일한 위치에 X 표시
이때 부모 윈도우 프로시저에서는
마우스 움직임 이벤트만 처리하고,
X 표시는 자식 윈도우 프로시저에서 처리
그냥 부모 윈도우 프로시저에서 처리하면 간단한데
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
static HWND hWnd2;
switch(mesg) {
case WM_CREATE:
hWnd2 = CreateWindow("WND2", "자식윈도우 ",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
320,0,320,240, hWnd, NULL, _hInstance, NULL);
break;
case WM_MOUSEMOVE:
int x, y;
HDC hdc;
x = LOWORD(lParam);
y = HIWORD(lParam);
hdc = GetDC(hWnd2);
TextOut(hdc, x, y, "X", 1);
ReleaseDC(hWnd2, hdc);
break;
case WM_DESTROY: PostQuitMessage(0); return FALSE;
}
return DefWindowProc(hWnd, mesg, wParam, lParam);
}
4
일단 자식 윈도우 만들고
부모 윈도우 프로시저에서 그냥 처리
자식 윈도우 핸들만 주의하만 돼
5
LRESULT CALLBACK WndProc2(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
switch(mesg)
{
}
return DefWindowProc(hWnd, mesg, wParam, lParam);
}
물론 자식 윈도우 프로시저에는 아무 처리 안 해
동작을 야기시키는 것은 부모에 있지만,
처리 내용은 자식 윈도우 프로시저에 있다
자식 윈도우에서 일어나는 일이니까 코드도 여기 넣어볼까
부모 윈도우가 자식 윈도우 프로시저에 적절한 메시지 날려
(자식 윈도우 프로시저 호출)
윈도우 프로시저는 프로그래머가 직접 호출 할 수 없는데
6
메시지 날리기: 윈도우 프로시저 호출
SendMessage(HWND hWnd, UINT Msg,
WPARAM wParam,
LPARAM lParam
)
파라미터는 윈도우 프로시저와 같다
7
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
static HWND hWnd2;
switch(mesg) {
case WM_CREATE:
hWnd2 = CreateWindow("WND2", "자식윈도우 ",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
320,0,320,240, hWnd, NULL, _hInstance, NULL);
break;
case WM_MOUSEMOVE:
SendMessage(hWnd2, 2000, wParam, lParam);
break;
case WM_DESTROY: PostQuitMessage(0); return FALSE;
}
return DefWindowProc(hWnd, mesg, wParam, lParam);
}
맘대로 정한 것
부모 윈도우에서 화면 출력 부분 제거
SendMessage 함수로 대치
부모 윈도우 프로시저
8
LRESULT CALLBACK WndProc2(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
switch(mesg) {
case 2000:
int x, y;
HDC hdc;
x = LOWORD(lParam);
y = HIWORD(lParam);
hdc = GetDC(hWnd);
TextOut(hdc, x, y, "X", 1);
ReleaseDC(hWnd, hdc);
break;
case WM_DESTROY: PostQuitMessage(0); return FALSE;
}
return DefWindowProc(hWnd, mesg, wParam, lParam);
}
메시지 번호로 2000 사용,
임의로 정한 것이지만 아무거나 하면 안돼요
실제로 1000으로 바꾸면 동작 안 해
자식 윈도우 프로시저
9
사용자 메시지 정의
#define WM_MYMOVE WM_USER+1
윈도우가 사용하는 마지막 메시지 상수
사용자가 임의로 정한 이름
메시지를 정의할 때 마다 WM_USER에 적당한 숫자
더해서 정의
이제 2000 대신 WM_MYMOVE를 사용
10
사용자 부가정보 활용
SendMessage(HWND hWnd, UINT Msg,
WPARAM wParam,LPARAM lParam)
이번엔 여기에 원하는 값 넣어보자
부모 윈도우에서 마우스 움직이면 이와는
직각 방향으로 자식 윈도우에 X 표시
(X 방향 움직임은 Y 방향으로, Y 방향 움직임은 X 방향으로)
물론 출력 단계에서 x, y를 뒤 바꾸면 간단하긴 하다
TextOut(hdc, x, y, "X", 1);
TextOut(hdc, y, x, "X", 1);
11
WM_MOUSEMOVE: LPARAM lParam
031 16 15
X 좌표 값Y 좌표 값
SendMessage(hWnd2, WM_MYMOVE, wParam, lParam)
031 16 15
Y 좌표 값X 좌표 값
lParam 값을 다음과 같이 바꾸어야 한다
12
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
static HWND hWnd2;
switch(mesg) {
case WM_CREATE:
hWnd2 = CreateWindow("WND2", "자식윈도우 ",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
320,0,320,240, hWnd, NULL, _hInstance, NULL);
break;
case WM_MOUSEMOVE:
int x, y;
x = LOWORD(lParam);
y = HIWORD(lParam);
lParam = (x << 16) | y;
SendMessage(hWnd2, WM_MYMOVE, wParam, lParam);
break;
case WM_DESTROY: PostQuitMessage(0); return FALSE;
}
return DefWindowProc(hWnd, mesg, wParam, lParam);
}
비트 연산
13
윈도우 프로시저 간접 호출
PostMessage(HWND hWnd, UINT Msg,
WPARAM wParam,
LPARAM lParam
)
파라미터는 윈도우 프로시저와 같다
큐 상태에 따라 메시지 처리가 지연될 수 있다
SendMessage(HWND, UINT, WPARAM, LPARAM)
해당 윈도우 프로시저를 직접 호출하므로
메시지가 곧 바로 처리된다
14
지금까지
윈도우 생성과 메시지 처리 유형 5가지를 모
두 살펴 보았습니다
이벤트 기반 프로그래밍이 머리 속에 들어왔습니까 ?
꼬집어서 설명할 수는 없지만
지금까지 학습한 개념으로 인터넷상의 유용한 자료
를 쉽게 여러분의 것으로 만들 수 있을 것입니다
http://www.winapi.co.kr/
http://www.codeguru.com/
http://www.codeproject.com/
http://hdi.kumoh.ac.kr/winapp
이상으로 Win32 API (with C)를 이용한 윈도우 프로그래밍 입문을 마칩니다
짝 짝 짝~

More Related Content

What's hot

03 첫번째프로그램
03 첫번째프로그램03 첫번째프로그램
03 첫번째프로그램jaypi Ko
 
07 윈도우 핸들
07 윈도우 핸들07 윈도우 핸들
07 윈도우 핸들jaypi Ko
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationMouna Torjmen
 
Formation python
Formation pythonFormation python
Formation pythonj_lipaz
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기OnGameServer
 
Representing TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLRepresenting TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLVillu Ruusmann
 
Solid Deconstruction
Solid DeconstructionSolid Deconstruction
Solid DeconstructionKevlin Henney
 
Introduction to Python Celery
Introduction to Python CeleryIntroduction to Python Celery
Introduction to Python CeleryMahendra M
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerSana Aroussi
 
Node js Modules and Event Emitters
Node js Modules and Event EmittersNode js Modules and Event Emitters
Node js Modules and Event EmittersTheCreativedev Blog
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxHathat10
 
ROS 2 deployment in K8s: DDS Router as WAN comms enabler
ROS 2 deployment in K8s: DDS Router as WAN comms enablerROS 2 deployment in K8s: DDS Router as WAN comms enabler
ROS 2 deployment in K8s: DDS Router as WAN comms enablereProsima
 

What's hot (20)

03 첫번째프로그램
03 첫번째프로그램03 첫번째프로그램
03 첫번째프로그램
 
07 윈도우 핸들
07 윈도우 핸들07 윈도우 핸들
07 윈도우 핸들
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Formation python
Formation pythonFormation python
Formation python
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
Representing TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLRepresenting TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMML
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
 
Solid Deconstruction
Solid DeconstructionSolid Deconstruction
Solid Deconstruction
 
Introduction to Python Celery
Introduction to Python CeleryIntroduction to Python Celery
Introduction to Python Celery
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régner
 
Dart ( 4 )
Dart ( 4 ) Dart ( 4 )
Dart ( 4 )
 
Borland C++Builder 進階課程
Borland C++Builder 進階課程Borland C++Builder 進階課程
Borland C++Builder 進階課程
 
Node js Modules and Event Emitters
Node js Modules and Event EmittersNode js Modules and Event Emitters
Node js Modules and Event Emitters
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptx
 
ROS 2 deployment in K8s: DDS Router as WAN comms enabler
ROS 2 deployment in K8s: DDS Router as WAN comms enablerROS 2 deployment in K8s: DDS Router as WAN comms enabler
ROS 2 deployment in K8s: DDS Router as WAN comms enabler
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 

More from jaypi Ko

CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic ModelCVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Modeljaypi Ko
 
개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)jaypi Ko
 
[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현jaypi Ko
 
파이썬설치
파이썬설치파이썬설치
파이썬설치jaypi Ko
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기jaypi Ko
 
C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것jaypi Ko
 
[확률통계]04모수추정
[확률통계]04모수추정[확률통계]04모수추정
[확률통계]04모수추정jaypi Ko
 
MFC 프로젝트 시작하기
MFC 프로젝트 시작하기MFC 프로젝트 시작하기
MFC 프로젝트 시작하기jaypi Ko
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기jaypi Ko
 
[신경망기초] 신경망학습
[신경망기초] 신경망학습[신경망기초] 신경망학습
[신경망기초] 신경망학습jaypi Ko
 
[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망jaypi Ko
 
[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현jaypi Ko
 
com architecture
com architecturecom architecture
com architecturejaypi Ko
 
[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석jaypi Ko
 
[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요jaypi Ko
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석jaypi Ko
 
[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘jaypi Ko
 
[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론jaypi Ko
 

More from jaypi Ko (20)

CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic ModelCVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
 
개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)
 
[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현
 
파이썬설치
파이썬설치파이썬설치
파이썬설치
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것
 
[확률통계]04모수추정
[확률통계]04모수추정[확률통계]04모수추정
[확률통계]04모수추정
 
MFC 프로젝트 시작하기
MFC 프로젝트 시작하기MFC 프로젝트 시작하기
MFC 프로젝트 시작하기
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기
 
[신경망기초] 신경망학습
[신경망기초] 신경망학습[신경망기초] 신경망학습
[신경망기초] 신경망학습
 
[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망
 
[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현
 
interface
interfaceinterface
interface
 
com architecture
com architecturecom architecture
com architecture
 
[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석
 
[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘
 
[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론
 

13 사용자 메세지 처리

  • 1. CHAP. 13 사용자 메시지 처리 1 nonezero@kumoh.ac.kr
  • 2. 2 프로그래머가 메시지 정의하고 필요할 때 발생시킬 수 있다 나만의 메시지를 만들자 메시지 처리 유형 Ⅴ 굳이 유형으로 분류 하자면
  • 3. 3 실습 동일한 크기의 윈도우를 두 개 만들고, 부모 윈도우에서 마우스 움직이면 자식 윈도우의 동일한 위치에 X 표시 이때 부모 윈도우 프로시저에서는 마우스 움직임 이벤트만 처리하고, X 표시는 자식 윈도우 프로시저에서 처리 그냥 부모 윈도우 프로시저에서 처리하면 간단한데
  • 4. LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { static HWND hWnd2; switch(mesg) { case WM_CREATE: hWnd2 = CreateWindow("WND2", "자식윈도우 ", WS_OVERLAPPEDWINDOW|WS_VISIBLE, 320,0,320,240, hWnd, NULL, _hInstance, NULL); break; case WM_MOUSEMOVE: int x, y; HDC hdc; x = LOWORD(lParam); y = HIWORD(lParam); hdc = GetDC(hWnd2); TextOut(hdc, x, y, "X", 1); ReleaseDC(hWnd2, hdc); break; case WM_DESTROY: PostQuitMessage(0); return FALSE; } return DefWindowProc(hWnd, mesg, wParam, lParam); } 4 일단 자식 윈도우 만들고 부모 윈도우 프로시저에서 그냥 처리 자식 윈도우 핸들만 주의하만 돼
  • 5. 5 LRESULT CALLBACK WndProc2(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { switch(mesg) { } return DefWindowProc(hWnd, mesg, wParam, lParam); } 물론 자식 윈도우 프로시저에는 아무 처리 안 해 동작을 야기시키는 것은 부모에 있지만, 처리 내용은 자식 윈도우 프로시저에 있다 자식 윈도우에서 일어나는 일이니까 코드도 여기 넣어볼까 부모 윈도우가 자식 윈도우 프로시저에 적절한 메시지 날려 (자식 윈도우 프로시저 호출) 윈도우 프로시저는 프로그래머가 직접 호출 할 수 없는데
  • 6. 6 메시지 날리기: 윈도우 프로시저 호출 SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) 파라미터는 윈도우 프로시저와 같다
  • 7. 7 LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { static HWND hWnd2; switch(mesg) { case WM_CREATE: hWnd2 = CreateWindow("WND2", "자식윈도우 ", WS_OVERLAPPEDWINDOW|WS_VISIBLE, 320,0,320,240, hWnd, NULL, _hInstance, NULL); break; case WM_MOUSEMOVE: SendMessage(hWnd2, 2000, wParam, lParam); break; case WM_DESTROY: PostQuitMessage(0); return FALSE; } return DefWindowProc(hWnd, mesg, wParam, lParam); } 맘대로 정한 것 부모 윈도우에서 화면 출력 부분 제거 SendMessage 함수로 대치 부모 윈도우 프로시저
  • 8. 8 LRESULT CALLBACK WndProc2(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { switch(mesg) { case 2000: int x, y; HDC hdc; x = LOWORD(lParam); y = HIWORD(lParam); hdc = GetDC(hWnd); TextOut(hdc, x, y, "X", 1); ReleaseDC(hWnd, hdc); break; case WM_DESTROY: PostQuitMessage(0); return FALSE; } return DefWindowProc(hWnd, mesg, wParam, lParam); } 메시지 번호로 2000 사용, 임의로 정한 것이지만 아무거나 하면 안돼요 실제로 1000으로 바꾸면 동작 안 해 자식 윈도우 프로시저
  • 9. 9 사용자 메시지 정의 #define WM_MYMOVE WM_USER+1 윈도우가 사용하는 마지막 메시지 상수 사용자가 임의로 정한 이름 메시지를 정의할 때 마다 WM_USER에 적당한 숫자 더해서 정의 이제 2000 대신 WM_MYMOVE를 사용
  • 10. 10 사용자 부가정보 활용 SendMessage(HWND hWnd, UINT Msg, WPARAM wParam,LPARAM lParam) 이번엔 여기에 원하는 값 넣어보자 부모 윈도우에서 마우스 움직이면 이와는 직각 방향으로 자식 윈도우에 X 표시 (X 방향 움직임은 Y 방향으로, Y 방향 움직임은 X 방향으로) 물론 출력 단계에서 x, y를 뒤 바꾸면 간단하긴 하다 TextOut(hdc, x, y, "X", 1); TextOut(hdc, y, x, "X", 1);
  • 11. 11 WM_MOUSEMOVE: LPARAM lParam 031 16 15 X 좌표 값Y 좌표 값 SendMessage(hWnd2, WM_MYMOVE, wParam, lParam) 031 16 15 Y 좌표 값X 좌표 값 lParam 값을 다음과 같이 바꾸어야 한다
  • 12. 12 LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { static HWND hWnd2; switch(mesg) { case WM_CREATE: hWnd2 = CreateWindow("WND2", "자식윈도우 ", WS_OVERLAPPEDWINDOW|WS_VISIBLE, 320,0,320,240, hWnd, NULL, _hInstance, NULL); break; case WM_MOUSEMOVE: int x, y; x = LOWORD(lParam); y = HIWORD(lParam); lParam = (x << 16) | y; SendMessage(hWnd2, WM_MYMOVE, wParam, lParam); break; case WM_DESTROY: PostQuitMessage(0); return FALSE; } return DefWindowProc(hWnd, mesg, wParam, lParam); } 비트 연산
  • 13. 13 윈도우 프로시저 간접 호출 PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) 파라미터는 윈도우 프로시저와 같다 큐 상태에 따라 메시지 처리가 지연될 수 있다 SendMessage(HWND, UINT, WPARAM, LPARAM) 해당 윈도우 프로시저를 직접 호출하므로 메시지가 곧 바로 처리된다
  • 14. 14 지금까지 윈도우 생성과 메시지 처리 유형 5가지를 모 두 살펴 보았습니다 이벤트 기반 프로그래밍이 머리 속에 들어왔습니까 ? 꼬집어서 설명할 수는 없지만 지금까지 학습한 개념으로 인터넷상의 유용한 자료 를 쉽게 여러분의 것으로 만들 수 있을 것입니다 http://www.winapi.co.kr/ http://www.codeguru.com/ http://www.codeproject.com/ http://hdi.kumoh.ac.kr/winapp 이상으로 Win32 API (with C)를 이용한 윈도우 프로그래밍 입문을 마칩니다 짝 짝 짝~