SlideShare a Scribd company logo
1 of 14
Download to read offline
CHAP. 9
윈도우 스타일
1
2
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
static HWND hWnd2;
switch(mesg)
{
case WM_CREATE:
hWnd2 = CreateWindow(
"WND2",
"World",
WS_OVERLAPPEDWINDOW,
320, 0, 320, 240,
hWnd, NULL,
hInstance,
NULL
);
ShowWindow(hWnd2, SW_SHOW);
break;
} …
}
이거 빼면 화면에 윈도우 안
나타난다
3
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
static HWND hWnd2;
switch(mesg) {
case WM_CREATE:
hWnd2 = CreateWindow(
"WND2",
"World",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
320, 0, 320, 240,
hWnd, NULL,
hInstance,
NULL
);
ShowWindow(hWnd2, SW_SHOW);
break;
} …
}
다음과 같이 하면 생략할 수 있다
생성과 동시에 화면출력
옵션 (스타일) 지정
4
CreateWindow(…, DWORD dwStyle,…)
윈도우 생성
윈도우 생성 함수: 3번째 인자
5
꼭 알아두어야 할 스타일
WS_BORDER 윈도우 테두리 나타남
WS_CHILD 자식 윈도우로 설정
WS_POPUP 팝업 윈도우로 설정
WS_VISIBLE 윈도우를 생성과 동시에 화면에 표시
WS_OVERLAPPEDWINDOW 일반 속성 모두 포함
WS_CHILD 는 WS_POPUP과 함께 사용 불가 (반대 속성)
어떤 속성은 다른 속성들의 조합
기타 속성은 MSDN을 참고
WS_OVERLAPPED WS_CAPTION
WS_SYSMENU WS_THICKFRAME
WS_MINIMIZEBOX WS_MAXIMIZEBOX
※ MSDN 참고
6
스타일 추가 및 제거
WS_OVERLAPPEDWINDOW에서 WS_SYSMENU
제거해 보자
7
style = style & (~WS_SYSMENU);
스타일 추가: OR ( | )
스타일 제거: Negation ( ~ ) 및 AND ( & ) 연산 적용
DWORD style;
style = WS_OVERLAPPEDWINDOW | WS_VISIBLE;
style = _______________________ ;
hWnd2 = CreateWindow(
"WND2",
"WORLD",
style,
320, 0, 320, 240,
hWnd, NULL, _hInstance, NULL
);
비트 연산 잘 이해가 안되면 다음 참조
8
#include <stdio.h>
#define SW1 1 // 0001
#define SW2 2 // 0010
#define SW3 4 // 0100
#define SW4 8 // 1000
main()
{
int sw = 0; // 모든 스위치가 꺼져 있다
sw = SW1; // 1번 스위치 ON
sw = sw | SW2; // 2번 스위치 ON
sw = sw | SW3; // 3번 스위치 ON
if (sw & SW2) // 2번 스위치 ON인지 검사
printf(“ON”);
}
9
int sw = 0;
sw = SW1;
sw = sw | SW2;
sw = sw | SW3;
sw = sw & (~WS2);
if (sw & SW3) printf(“ON”);
0 0 0 0 0 0 0 1
sw
0 0 0 0 0 0 1 0 SW2
0 0 0 0 0 0 1 1
|
sw2 sw1
10
int sw = 0;
sw = SW1;
sw = sw | SW2;
sw = sw | SW3;
sw = sw & (~WS2);
if (sw & SW3) printf(“ON”);
0 0 0 0 0 0 1 1
sw
0 0 0 0 0 1 0 0 SW3
0 0 0 0 0 1 1 1
|
sw2 sw1sw3
11
int sw = 0;
sw = SW1;
sw = sw | SW2;
sw = sw | SW3;
sw = sw & (~WS2);
if (sw & SW3) printf(“ON”);
0 0 0 0 0 1 1 1
sw
1 1 1 1 1 1 0 1 ~SW2
0 0 0 0 0 1 0 1
&
SW2: OFF
12
int sw = 0;
sw = SW1;
sw = sw | SW2;
sw = sw | SW3;
sw = sw & (~WS2);
if (sw & SW3) printf(“ON”);
0 0 0 0 0 1 0 1
0 0 0 0 0 1 0 0 SW3
0 0 0 0 0 1 0 0 → 4 > 0
&
SW3: ON true
13
WS_CHILD 테스트
WS_CHILD 스타일 추가해 보자
부모 윈도우의 안쪽에 위치한다
부모 윈도우 벗어날 수 없음
14
LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
static HWND hWnd2;
switch(mesg) {
case WM_CREATE:
hWnd2 = CreateWindow(
"WND2",
"World",
WS_OVERLAPPEDWINDOW | WS_VISIBLE |
WS_CHILD,
320, 0, 320, 240,
hWnd,
NULL,
_hInstance,
NULL
);
break;
} …
}
다른 윈도우의 안쪽에 위치 하므로
반드시 부모 윈도우가 있어야 한다

More Related Content

What's hot

07 윈도우 핸들
07 윈도우 핸들07 윈도우 핸들
07 윈도우 핸들jaypi Ko
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기OnGameServer
 
JavaScript - From Birth To Closure
JavaScript - From Birth To ClosureJavaScript - From Birth To Closure
JavaScript - From Birth To ClosureRobert Nyman
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기Heo Seungwook
 
XSS Primer - Noob to Pro in 1 hour
XSS Primer - Noob to Pro in 1 hourXSS Primer - Noob to Pro in 1 hour
XSS Primer - Noob to Pro in 1 hoursnoopythesecuritydog
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Odoo
 
PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service WorkerAnna Su
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
LCA13: Xen on ARM
LCA13: Xen on ARMLCA13: Xen on ARM
LCA13: Xen on ARMLinaro
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeurAbdelwahab Naji
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxHathat10
 
Javascript Avançado
Javascript AvançadoJavascript Avançado
Javascript AvançadoBruno Tavares
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Jean-Baptiste Vigneron
 
d.ts 만들기
d.ts 만들기d.ts 만들기
d.ts 만들기DaeSeon Jeong
 
[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless modeAkihiro Suda
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문Daniel Seo
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineJason Terpko
 

What's hot (20)

07 윈도우 핸들
07 윈도우 핸들07 윈도우 핸들
07 윈도우 핸들
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
 
JavaScript - From Birth To Closure
JavaScript - From Birth To ClosureJavaScript - From Birth To Closure
JavaScript - From Birth To Closure
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
XSS Primer - Noob to Pro in 1 hour
XSS Primer - Noob to Pro in 1 hourXSS Primer - Noob to Pro in 1 hour
XSS Primer - Noob to Pro in 1 hour
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...
 
PWA 與 Service Worker
PWA 與 Service WorkerPWA 與 Service Worker
PWA 與 Service Worker
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
LCA13: Xen on ARM
LCA13: Xen on ARMLCA13: Xen on ARM
LCA13: Xen on ARM
 
spinlock.pdf
spinlock.pdfspinlock.pdf
spinlock.pdf
 
Svelte
SvelteSvelte
Svelte
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeur
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptx
 
Javascript Avançado
Javascript AvançadoJavascript Avançado
Javascript Avançado
 
Borland C++Builder 入門課程
Borland C++Builder 入門課程Borland C++Builder 入門課程
Borland C++Builder 入門課程
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
d.ts 만들기
d.ts 만들기d.ts 만들기
d.ts 만들기
 
[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation Pipeline
 

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

09 윈도우스타일

  • 2. 2 LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { static HWND hWnd2; switch(mesg) { case WM_CREATE: hWnd2 = CreateWindow( "WND2", "World", WS_OVERLAPPEDWINDOW, 320, 0, 320, 240, hWnd, NULL, hInstance, NULL ); ShowWindow(hWnd2, SW_SHOW); break; } … } 이거 빼면 화면에 윈도우 안 나타난다
  • 3. 3 LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { static HWND hWnd2; switch(mesg) { case WM_CREATE: hWnd2 = CreateWindow( "WND2", "World", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 320, 0, 320, 240, hWnd, NULL, hInstance, NULL ); ShowWindow(hWnd2, SW_SHOW); break; } … } 다음과 같이 하면 생략할 수 있다 생성과 동시에 화면출력 옵션 (스타일) 지정
  • 4. 4 CreateWindow(…, DWORD dwStyle,…) 윈도우 생성 윈도우 생성 함수: 3번째 인자
  • 5. 5 꼭 알아두어야 할 스타일 WS_BORDER 윈도우 테두리 나타남 WS_CHILD 자식 윈도우로 설정 WS_POPUP 팝업 윈도우로 설정 WS_VISIBLE 윈도우를 생성과 동시에 화면에 표시 WS_OVERLAPPEDWINDOW 일반 속성 모두 포함 WS_CHILD 는 WS_POPUP과 함께 사용 불가 (반대 속성) 어떤 속성은 다른 속성들의 조합 기타 속성은 MSDN을 참고 WS_OVERLAPPED WS_CAPTION WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX ※ MSDN 참고
  • 6. 6 스타일 추가 및 제거 WS_OVERLAPPEDWINDOW에서 WS_SYSMENU 제거해 보자
  • 7. 7 style = style & (~WS_SYSMENU); 스타일 추가: OR ( | ) 스타일 제거: Negation ( ~ ) 및 AND ( & ) 연산 적용 DWORD style; style = WS_OVERLAPPEDWINDOW | WS_VISIBLE; style = _______________________ ; hWnd2 = CreateWindow( "WND2", "WORLD", style, 320, 0, 320, 240, hWnd, NULL, _hInstance, NULL ); 비트 연산 잘 이해가 안되면 다음 참조
  • 8. 8 #include <stdio.h> #define SW1 1 // 0001 #define SW2 2 // 0010 #define SW3 4 // 0100 #define SW4 8 // 1000 main() { int sw = 0; // 모든 스위치가 꺼져 있다 sw = SW1; // 1번 스위치 ON sw = sw | SW2; // 2번 스위치 ON sw = sw | SW3; // 3번 스위치 ON if (sw & SW2) // 2번 스위치 ON인지 검사 printf(“ON”); }
  • 9. 9 int sw = 0; sw = SW1; sw = sw | SW2; sw = sw | SW3; sw = sw & (~WS2); if (sw & SW3) printf(“ON”); 0 0 0 0 0 0 0 1 sw 0 0 0 0 0 0 1 0 SW2 0 0 0 0 0 0 1 1 | sw2 sw1
  • 10. 10 int sw = 0; sw = SW1; sw = sw | SW2; sw = sw | SW3; sw = sw & (~WS2); if (sw & SW3) printf(“ON”); 0 0 0 0 0 0 1 1 sw 0 0 0 0 0 1 0 0 SW3 0 0 0 0 0 1 1 1 | sw2 sw1sw3
  • 11. 11 int sw = 0; sw = SW1; sw = sw | SW2; sw = sw | SW3; sw = sw & (~WS2); if (sw & SW3) printf(“ON”); 0 0 0 0 0 1 1 1 sw 1 1 1 1 1 1 0 1 ~SW2 0 0 0 0 0 1 0 1 & SW2: OFF
  • 12. 12 int sw = 0; sw = SW1; sw = sw | SW2; sw = sw | SW3; sw = sw & (~WS2); if (sw & SW3) printf(“ON”); 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 SW3 0 0 0 0 0 1 0 0 → 4 > 0 & SW3: ON true
  • 13. 13 WS_CHILD 테스트 WS_CHILD 스타일 추가해 보자 부모 윈도우의 안쪽에 위치한다 부모 윈도우 벗어날 수 없음
  • 14. 14 LRESULT CALLBACK WndProc(HWND hWnd, UINT mesg, WPARAM wParam, LPARAM lParam) { static HWND hWnd2; switch(mesg) { case WM_CREATE: hWnd2 = CreateWindow( "WND2", "World", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CHILD, 320, 0, 320, 240, hWnd, NULL, _hInstance, NULL ); break; } … } 다른 윈도우의 안쪽에 위치 하므로 반드시 부모 윈도우가 있어야 한다