SlideShare a Scribd company logo
1 of 14
Download to read offline
CHAP. 5
윈도우 프로그램 유형
1
2
윈도우 클래스와 윈도우
등록된
윈도우 클래스
등록된 윈도우 클래스를
토대로 생성된 윈도우
3
메시지 처리
등록된 윈도우 클래스를
토대로 생성된 윈도우
등록된
윈도우 클래스
윈도우
프로시저
4
인스턴스
지금까지 작성해 보았던 프로그램을 그림으로 나타낸 것
앞으로 만들 프로그램에 대한 그림 그려봐!
하나의 어플리케이션 큐를
가지고 있는 프로그램
윈도우
프로시저
윈도우
HINSTANCE
HWND
5
윈도우 두 개 이상
HWND
HWND
윈도우 1
윈도우 2
하나의 어플리케이션 큐를
가지고 있는 프로그램
윈 도 우
1 , 2 를
위 한
프로시저
HINSTANCE
윈도우 두 개 이상 포함된 프로그램
각 윈도우에서 발생한 이벤트는 어디서 처리 ?
6
윈도우 프로시저도 두 개 이상
HWND
HWND
HINSTANCE
윈도우 1
윈도우 2
하나의 어플리케이션 큐를
가지고 있는 프로그램
윈도우 1
프로시저
윈도우 2
프로시저
각 윈도우에서 발생하는 이벤트 처리를 전담하는
윈도우 프로시저를 따로 따로
7
HWND
HWND
HINSTANCE
윈도우 1
윈도우 2
하나의 어플리케이션 큐를
가지고 있는 프로그램
윈도우 1
프로시저
윈도우 2
프로시저
윈도우
사이의 통신
일반적인 윈도우 프로그램
윈도우가 두 개 이상 있으면
이들 간에 뭔가 주고 받는 처리가 생긴다
8
윈도우 개수가 대략 30
숫자 9 버튼을 클릭하면
숫자 창에 9가 나타난다
버튼 하나 하나가 다 윈도우
9
윈도우 두 개, 프로시저 한 개
윈도우 두 개 만들고 마우스 왼쪽 버튼 눌림에 대해
메시지 박스 출력
10
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HWND _hWnd2;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE
hPrevInstance, LPSTR lpszArg, int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS WndClass;
WndClass.style = NULL;
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 = NULL;
WndClass.lpszClassName = "Hello";
if(!RegisterClass(&WndClass)) return NULL;
설명 편하게 하려고 전역변수 사용했음
hello로 등록할 윈도우
클래스로 부터 만들어
지는 윈도우의 메시지
처리를 담당하는 함수
11
hWnd = CreateWindow(
"Hello",
"Hello",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL, NULL, hInstance,
NULL
);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
윈도우 생성하고 화면에 출력하는 코드
그렇다면 윈도우를 하나 더 만들려면…
윈도우 클래스 이름이
hello인 클래스를 이용
하여 윈도우 생성
12
_hWnd2 = CreateWindow(
"Hello",
"Hello",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL, NULL, hInstance,
NULL
);
ShowWindow(_hWnd2, nCmdShow);
UpdateWindow(_hWnd2);
똑 같은 코드를 다시 한번 더. 간단하다
윈도우 클래스 이름이
hello인 클래스를 이용
하여 윈도우 생성
13
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
switch(mesg)
{
case WM_LBUTTONDOWN:
MessageBox(hWnd, "왼쪽버튼 눌림", "알림", MB_OK);
break;
case WM_DESTROY :
PostQuitMessage(0);
return FALSE;
}
return DefWindowProc(hWnd, mesg, wParam, lParam);
}
14
윈도우 구분 없이 마우스 왼쪽 버튼을 누르면 같은
대화상자 출력
다음에는 뭐 해볼까요 ?
각 윈도우 위에서 마우스 왼쪽 버튼 눌렀을 때 다른
내용의 대화상자 출력하게 만들어 봅시다
윈도우 프로시저가 한 개니까 당연
윈도우마다 윈도우 프로시저
따로 만들어 주자는 얘기

More Related Content

What's hot

03 첫번째프로그램
03 첫번째프로그램03 첫번째프로그램
03 첫번째프로그램jaypi Ko
 
Plsql
PlsqlPlsql
PlsqlAz Za
 
Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Fiche3 ex-sous-programme
Fiche3 ex-sous-programmeFiche3 ex-sous-programme
Fiche3 ex-sous-programmeBaghdadi Wajih
 
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制裝機安 Angelo
 
Cohesion et couplage
Cohesion et couplage Cohesion et couplage
Cohesion et couplage Ahmed HARRAK
 
[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐MinGeun Park
 
Kernel Recipes 2019 - BPF at Facebook
Kernel Recipes 2019 - BPF at FacebookKernel Recipes 2019 - BPF at Facebook
Kernel Recipes 2019 - BPF at FacebookAnne Nicolas
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
Gestion d’un projet informatique
Gestion d’un projet informatiqueGestion d’un projet informatique
Gestion d’un projet informatiqueAymen Foudhaili
 

What's hot (20)

03 첫번째프로그램
03 첫번째프로그램03 첫번째프로그램
03 첫번째프로그램
 
Plsql
PlsqlPlsql
Plsql
 
Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Fiche3 ex-sous-programme
Fiche3 ex-sous-programmeFiche3 ex-sous-programme
Fiche3 ex-sous-programme
 
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
【VM保護備份專題】Dell Power Protect Data Manager (PPDM) 詳解TSDM機制
 
Vagrant
Vagrant Vagrant
Vagrant
 
Cohesion et couplage
Cohesion et couplage Cohesion et couplage
Cohesion et couplage
 
[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐
 
Borland C++Builder 進階課程
Borland C++Builder 進階課程Borland C++Builder 進階課程
Borland C++Builder 進階課程
 
Kernel Recipes 2019 - BPF at Facebook
Kernel Recipes 2019 - BPF at FacebookKernel Recipes 2019 - BPF at Facebook
Kernel Recipes 2019 - BPF at Facebook
 
Borland C++Builder 入門課程
Borland C++Builder 入門課程Borland C++Builder 入門課程
Borland C++Builder 入門課程
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Gestion comptes bancaires Spring boot
Gestion comptes bancaires Spring bootGestion comptes bancaires Spring boot
Gestion comptes bancaires Spring boot
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
Gestion d’un projet informatique
Gestion d’un projet informatiqueGestion d’un projet informatique
Gestion d’un projet informatique
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 

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
 
09 윈도우스타일
09 윈도우스타일09 윈도우스타일
09 윈도우스타일jaypi Ko
 
[신경망기초] 신경망학습
[신경망기초] 신경망학습[신경망기초] 신경망학습
[신경망기초] 신경망학습jaypi Ko
 
[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망jaypi Ko
 
[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현jaypi Ko
 
com architecture
com architecturecom architecture
com architecturejaypi 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 윈도우프로그램 들어가기
 
09 윈도우스타일
09 윈도우스타일09 윈도우스타일
09 윈도우스타일
 
[신경망기초] 신경망학습
[신경망기초] 신경망학습[신경망기초] 신경망학습
[신경망기초] 신경망학습
 
[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망
 
[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현
 
interface
interfaceinterface
interface
 
com architecture
com architecturecom architecture
com architecture
 
[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석
 
[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘
 

05 윈도우 프로그램 유형

  • 2. 2 윈도우 클래스와 윈도우 등록된 윈도우 클래스 등록된 윈도우 클래스를 토대로 생성된 윈도우
  • 3. 3 메시지 처리 등록된 윈도우 클래스를 토대로 생성된 윈도우 등록된 윈도우 클래스 윈도우 프로시저
  • 4. 4 인스턴스 지금까지 작성해 보았던 프로그램을 그림으로 나타낸 것 앞으로 만들 프로그램에 대한 그림 그려봐! 하나의 어플리케이션 큐를 가지고 있는 프로그램 윈도우 프로시저 윈도우 HINSTANCE HWND
  • 5. 5 윈도우 두 개 이상 HWND HWND 윈도우 1 윈도우 2 하나의 어플리케이션 큐를 가지고 있는 프로그램 윈 도 우 1 , 2 를 위 한 프로시저 HINSTANCE 윈도우 두 개 이상 포함된 프로그램 각 윈도우에서 발생한 이벤트는 어디서 처리 ?
  • 6. 6 윈도우 프로시저도 두 개 이상 HWND HWND HINSTANCE 윈도우 1 윈도우 2 하나의 어플리케이션 큐를 가지고 있는 프로그램 윈도우 1 프로시저 윈도우 2 프로시저 각 윈도우에서 발생하는 이벤트 처리를 전담하는 윈도우 프로시저를 따로 따로
  • 7. 7 HWND HWND HINSTANCE 윈도우 1 윈도우 2 하나의 어플리케이션 큐를 가지고 있는 프로그램 윈도우 1 프로시저 윈도우 2 프로시저 윈도우 사이의 통신 일반적인 윈도우 프로그램 윈도우가 두 개 이상 있으면 이들 간에 뭔가 주고 받는 처리가 생긴다
  • 8. 8 윈도우 개수가 대략 30 숫자 9 버튼을 클릭하면 숫자 창에 9가 나타난다 버튼 하나 하나가 다 윈도우
  • 9. 9 윈도우 두 개, 프로시저 한 개 윈도우 두 개 만들고 마우스 왼쪽 버튼 눌림에 대해 메시지 박스 출력
  • 10. 10 #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HWND _hWnd2; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArg, int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS WndClass; WndClass.style = NULL; 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 = NULL; WndClass.lpszClassName = "Hello"; if(!RegisterClass(&WndClass)) return NULL; 설명 편하게 하려고 전역변수 사용했음 hello로 등록할 윈도우 클래스로 부터 만들어 지는 윈도우의 메시지 처리를 담당하는 함수
  • 11. 11 hWnd = CreateWindow( "Hello", "Hello", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); 윈도우 생성하고 화면에 출력하는 코드 그렇다면 윈도우를 하나 더 만들려면… 윈도우 클래스 이름이 hello인 클래스를 이용 하여 윈도우 생성
  • 12. 12 _hWnd2 = CreateWindow( "Hello", "Hello", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(_hWnd2, nCmdShow); UpdateWindow(_hWnd2); 똑 같은 코드를 다시 한번 더. 간단하다 윈도우 클래스 이름이 hello인 클래스를 이용 하여 윈도우 생성
  • 13. 13 while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { switch(mesg) { case WM_LBUTTONDOWN: MessageBox(hWnd, "왼쪽버튼 눌림", "알림", MB_OK); break; case WM_DESTROY : PostQuitMessage(0); return FALSE; } return DefWindowProc(hWnd, mesg, wParam, lParam); }
  • 14. 14 윈도우 구분 없이 마우스 왼쪽 버튼을 누르면 같은 대화상자 출력 다음에는 뭐 해볼까요 ? 각 윈도우 위에서 마우스 왼쪽 버튼 눌렀을 때 다른 내용의 대화상자 출력하게 만들어 봅시다 윈도우 프로시저가 한 개니까 당연 윈도우마다 윈도우 프로시저 따로 만들어 주자는 얘기