SlideShare a Scribd company logo
1 of 15
Chapter 01
윈도우 프로그래밍의 기초
Index
1. 윈도우 프로그래밍의 개요
2. 윈도우 프로그램의 구조
윈도우 프로그래밍의 개요
1. 윈도우 프로그래밍의 개요
Window Program
MS Windows OS 기반의 응용 프로그램
Feature
• GUI 기반 프로그램
• 이벤트 기반 프로그램
• 멀티스레드 기반 프로그램
윈도우 프로그램의 구조
2. 윈도우 프로그램의 구조
Structure
• 메인 부분
• 윈도우를 만들고, 화면에 윈도우를 띄우며, 발생되는 모든 메시지를 전송
• 메시지는 윈도우 커널이 보내며 메인 부분에서 메시지 처리 부분으로 보냄
• WinMain()
• 메시지 처리 부분
• 메시지를 받고 메시지에 약속된 반응을 나타냄
• WndProc()
2. 윈도우 프로그램의 구조
WinMain()
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow);
// WINAPI : 윈도우 프로그램을 의미
// hInstance : 운영체제의 커널이 응용 프로그램에 부여한 ID로
// 메모리에서의 위치
// szCmdLine : 명령 라인에서 프로그램 구동 시 전달할 문자열
// iCmdShow : 윈도우에 출력하는 형태. 커널에 의해 넘어옴.
Role
1. 윈도우 클래스를 생성
2. 생성된 윈도우 클래스를 등록
3. 등록된 클래스를 이용해 윈도우 생성
4. 메시지 큐에서 메시지를 하나씩 꺼내어 WndProc() 함수에 보냄
2. 윈도우 프로그램의 구조
Window Class
생성하려는 윈도우의 속성 값을 저장해 등록하는 구조체
typedef struct tagWNDCLASSEX {
UINT cbSize; //구조체 크기
UINT style; //윈도우 스타일
WNDPROC lpfnWndProc; //프로시저 함수
int cbClsExtra; //클래스 여분 메모리
int cbWndExtra; //윈도우 여분 메모리
HINSTANCE hInstance; //윈도우 인스턴스
HICON hIcon; //아이콘
HCURSOR hCursor; //커서
HBRUSH hbrBackground;//배경
LPCTSTR lpszMenuName; //메뉴 이름
LPCTSTR lpszClassName;//클래스 이름
HICON hIconSm; //작은 아이콘
} WNDCLASSEX, *PWNDCLASSEX;
2. 윈도우 프로그램의 구조
RegisterClassEx()
ATOM WINAPI RegisterClassEx (
_In_ const WNDCLASSEX *lpwcx
);
CreateWindow()
HWND WINAPI CreateWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName,
_In_ DWORD dwStyle,
_In_ int x,
_In_ int y,
_In_ int nWidth,
_In_ int nHeight,
_In_opt_ HWND hWndParent,
_In_opt_ HMENU hMenu,
_In_opt_ HINSTANCE hInstance,
_In_opt_ LPVOID lpParam
);
2. 윈도우 프로그램의 구조
Window Style
• WS_OVERLAPPED : 기본적인 윈도우로 아이콘이 없고, 최소화, 최대화, 닫기 버튼 X. 시스템 메뉴 나타나지 않음
• WS_POPUP : 팝업 윈도우. WS_CHILD와 함께 사용 불가
• WS_CHILD : 자식 윈도우. WS_POPUP과 함께 사용 불가
• WS_MINIMIZE, WS_MAXIMIZE : 처음 등장할 때 최소화 혹은 최대화인 상태로 윈도우를 만듦
• WS_VISIBLE : 윈도우가 만들어지면 화면에 나타남
• WS_CAPTION : 타이틀 바가 있는 윈도우. WS_BORDER | WS_DLGFRAME과 동일
• WS_BORDER : 윈도우의 테두리가 선으로 이뤄짐. 크기 변경 불가
• WS_DLGFRAME : 일반적인 프레임 모양. 타이틀 바 포함. 크기 변경 불가
• WS_VSCROLL, WS_HSCROLL : 수직 혹은 수평 스크롤 바 포함
• WS_SYSMENU : 타이틀 바에서 마우스 오른쪽 버튼을 누르면 시스템 메뉴가 나타남
• WS_THICKFRAME : 일반적인 프레임 모양. 타이틀 바 미포함. 크기 변경 가능
• WS_MINIMIZEBOX, WS_MAXIMIZEBOX : 타이틀 바에 최소화 혹은 최대화 버튼 생성
• WS_OVERLAPPEDWINDOW : WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
• WS_POPUPWINDOW : WS_POPUP | WS_BORDER | WS_SYSMENU
2. 윈도우 프로그램의 구조
ShowWindow()
BOOL ShowWindow(HWND hWnd, int nCmdShow);
// hWnd : 윈도우 핸들 값
// nCmdShow : 화면에 나타내는 방법
// SW_HIDE, SW_SHOW
// SW_MAXIMIZE, SW_MINIMIZE
UpdateWindow()
BOOL UpdateWindow(HWND hWnd);
// 윈도우에 WM_PAINT 메세지를 보냄
2. 윈도우 프로그램의 구조
Message Handling
1. 키보드, 마우스 등에 의해 이벤트 발생
2. 윈도우 시스템 감지
3. 해당 이벤트에 사상되는 값을 메시지 큐에 저장
4. WinMain()에서 메시지를 하나씩 꺼내어 WndProc()에서 처리
2. 윈도우 프로그램의 구조
GetMessage()
BOOL GetMessage(
LPMSG lpMsg, // 메시지 포인터
HWND hWnd, // 메시지가 발생한 윈도우의 핸들
UINT wMsgFilterMin, // 얻어올 메시지의 범위에서 최소 정숫값
UINT wMsgFilterMax, // 얻어올 메시지의 범위에서 최대 정숫값
);
TranslateMessage()
BOOL TranslateMessage(const MSG* lpMsg);
DispatchMessage()
LRESULT DispatchMessage(const MSG* lpMsg);
2. 윈도우 프로그램의 구조
WndProc()
LRESULT WndProc(
HWND hWnd, // 생성된 윈도우의 핸들
UINT iMsg, // 메시지 번호
WPARAM wParam, // 메시지에 따른 추가 정보
LPARAM lParam
};
감사합니다

More Related Content

More from Seonmun Choi

Android Study Summary 2-2
Android Study Summary 2-2Android Study Summary 2-2
Android Study Summary 2-2Seonmun Choi
 
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수Seonmun Choi
 
Android Study Summary 2-1
Android Study Summary 2-1Android Study Summary 2-1
Android Study Summary 2-1Seonmun Choi
 
Basic study 4회차
Basic study 4회차Basic study 4회차
Basic study 4회차Seonmun Choi
 
Basic study 3회차
Basic study 3회차Basic study 3회차
Basic study 3회차Seonmun Choi
 
Basic study 2회차
Basic study 2회차Basic study 2회차
Basic study 2회차Seonmun Choi
 
Basic study 1회차
Basic study 1회차Basic study 1회차
Basic study 1회차Seonmun Choi
 

More from Seonmun Choi (8)

Android Study Summary 2-2
Android Study Summary 2-2Android Study Summary 2-2
Android Study Summary 2-2
 
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
Item1 c++을 언어들의 연합체로 바라보는 안목은 필수
 
Initializer list
Initializer listInitializer list
Initializer list
 
Android Study Summary 2-1
Android Study Summary 2-1Android Study Summary 2-1
Android Study Summary 2-1
 
Basic study 4회차
Basic study 4회차Basic study 4회차
Basic study 4회차
 
Basic study 3회차
Basic study 3회차Basic study 3회차
Basic study 3회차
 
Basic study 2회차
Basic study 2회차Basic study 2회차
Basic study 2회차
 
Basic study 1회차
Basic study 1회차Basic study 1회차
Basic study 1회차
 

핵심 API로 배우는 윈도우 프로그래밍 Chapter01 요약

  • 2. Index 1. 윈도우 프로그래밍의 개요 2. 윈도우 프로그램의 구조
  • 4. 1. 윈도우 프로그래밍의 개요 Window Program MS Windows OS 기반의 응용 프로그램 Feature • GUI 기반 프로그램 • 이벤트 기반 프로그램 • 멀티스레드 기반 프로그램
  • 6. 2. 윈도우 프로그램의 구조 Structure • 메인 부분 • 윈도우를 만들고, 화면에 윈도우를 띄우며, 발생되는 모든 메시지를 전송 • 메시지는 윈도우 커널이 보내며 메인 부분에서 메시지 처리 부분으로 보냄 • WinMain() • 메시지 처리 부분 • 메시지를 받고 메시지에 약속된 반응을 나타냄 • WndProc()
  • 7. 2. 윈도우 프로그램의 구조 WinMain() int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow); // WINAPI : 윈도우 프로그램을 의미 // hInstance : 운영체제의 커널이 응용 프로그램에 부여한 ID로 // 메모리에서의 위치 // szCmdLine : 명령 라인에서 프로그램 구동 시 전달할 문자열 // iCmdShow : 윈도우에 출력하는 형태. 커널에 의해 넘어옴. Role 1. 윈도우 클래스를 생성 2. 생성된 윈도우 클래스를 등록 3. 등록된 클래스를 이용해 윈도우 생성 4. 메시지 큐에서 메시지를 하나씩 꺼내어 WndProc() 함수에 보냄
  • 8. 2. 윈도우 프로그램의 구조 Window Class 생성하려는 윈도우의 속성 값을 저장해 등록하는 구조체 typedef struct tagWNDCLASSEX { UINT cbSize; //구조체 크기 UINT style; //윈도우 스타일 WNDPROC lpfnWndProc; //프로시저 함수 int cbClsExtra; //클래스 여분 메모리 int cbWndExtra; //윈도우 여분 메모리 HINSTANCE hInstance; //윈도우 인스턴스 HICON hIcon; //아이콘 HCURSOR hCursor; //커서 HBRUSH hbrBackground;//배경 LPCTSTR lpszMenuName; //메뉴 이름 LPCTSTR lpszClassName;//클래스 이름 HICON hIconSm; //작은 아이콘 } WNDCLASSEX, *PWNDCLASSEX;
  • 9. 2. 윈도우 프로그램의 구조 RegisterClassEx() ATOM WINAPI RegisterClassEx ( _In_ const WNDCLASSEX *lpwcx ); CreateWindow() HWND WINAPI CreateWindow( _In_opt_ LPCTSTR lpClassName, _In_opt_ LPCTSTR lpWindowName, _In_ DWORD dwStyle, _In_ int x, _In_ int y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam );
  • 10. 2. 윈도우 프로그램의 구조 Window Style • WS_OVERLAPPED : 기본적인 윈도우로 아이콘이 없고, 최소화, 최대화, 닫기 버튼 X. 시스템 메뉴 나타나지 않음 • WS_POPUP : 팝업 윈도우. WS_CHILD와 함께 사용 불가 • WS_CHILD : 자식 윈도우. WS_POPUP과 함께 사용 불가 • WS_MINIMIZE, WS_MAXIMIZE : 처음 등장할 때 최소화 혹은 최대화인 상태로 윈도우를 만듦 • WS_VISIBLE : 윈도우가 만들어지면 화면에 나타남 • WS_CAPTION : 타이틀 바가 있는 윈도우. WS_BORDER | WS_DLGFRAME과 동일 • WS_BORDER : 윈도우의 테두리가 선으로 이뤄짐. 크기 변경 불가 • WS_DLGFRAME : 일반적인 프레임 모양. 타이틀 바 포함. 크기 변경 불가 • WS_VSCROLL, WS_HSCROLL : 수직 혹은 수평 스크롤 바 포함 • WS_SYSMENU : 타이틀 바에서 마우스 오른쪽 버튼을 누르면 시스템 메뉴가 나타남 • WS_THICKFRAME : 일반적인 프레임 모양. 타이틀 바 미포함. 크기 변경 가능 • WS_MINIMIZEBOX, WS_MAXIMIZEBOX : 타이틀 바에 최소화 혹은 최대화 버튼 생성 • WS_OVERLAPPEDWINDOW : WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX • WS_POPUPWINDOW : WS_POPUP | WS_BORDER | WS_SYSMENU
  • 11. 2. 윈도우 프로그램의 구조 ShowWindow() BOOL ShowWindow(HWND hWnd, int nCmdShow); // hWnd : 윈도우 핸들 값 // nCmdShow : 화면에 나타내는 방법 // SW_HIDE, SW_SHOW // SW_MAXIMIZE, SW_MINIMIZE UpdateWindow() BOOL UpdateWindow(HWND hWnd); // 윈도우에 WM_PAINT 메세지를 보냄
  • 12. 2. 윈도우 프로그램의 구조 Message Handling 1. 키보드, 마우스 등에 의해 이벤트 발생 2. 윈도우 시스템 감지 3. 해당 이벤트에 사상되는 값을 메시지 큐에 저장 4. WinMain()에서 메시지를 하나씩 꺼내어 WndProc()에서 처리
  • 13. 2. 윈도우 프로그램의 구조 GetMessage() BOOL GetMessage( LPMSG lpMsg, // 메시지 포인터 HWND hWnd, // 메시지가 발생한 윈도우의 핸들 UINT wMsgFilterMin, // 얻어올 메시지의 범위에서 최소 정숫값 UINT wMsgFilterMax, // 얻어올 메시지의 범위에서 최대 정숫값 ); TranslateMessage() BOOL TranslateMessage(const MSG* lpMsg); DispatchMessage() LRESULT DispatchMessage(const MSG* lpMsg);
  • 14. 2. 윈도우 프로그램의 구조 WndProc() LRESULT WndProc( HWND hWnd, // 생성된 윈도우의 핸들 UINT iMsg, // 메시지 번호 WPARAM wParam, // 메시지에 따른 추가 정보 LPARAM lParam };