본문 바로가기

WndProc WndProc 메시지 처리 함수란 메시지가 발생할 때 프로그램의 반응을 처리하는 일을 하며 WinMain 함수와는 별도로 WndProc 라는 이름으로 존재한다. 윈도우 프로시저(Window Procedure)라는 뜻이고 통상 "윈드프록" 이라고 읽는다. WndProc 은 WinMain 에서 호출하는게 아니라 윈도우즈에 의해 호출된다. 메시지가 입력되면 윈도우즈에 의해 WndProc 이 호출되어 메시지를 처리한다. 이렇게 운영체제에 의해 호출되는 응용 프로그램내의 함수를 콜백(CallBack) 함수라고 한다. WndProc의 인수는 4개이며 MSG 구조체의 멤버 4개와 동일하다. WndProc의 구조는 대체로 다음과 같은 형태를 가지고, 메시지의 종류에 따라 다중 분기하여 메시지별로 처리를 진행한다. sw..
MSG MSG 실제 메시지 처리는 별도의 메시지 처리 함수(WndProc)에서 수행한다. 메시지는 시스템의 변화에 대한 정보이며 MSG 라는 구조체에 보관된다. typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; hwnd 메시지를 받을 윈도우 핸들이다. message 어떤 종류의 메시지인가를 나타낸다. wParam 32비트 값이며 전달된 메시지에 대한 부가적인 정보를 가진다. 어떤 의미를 가지는가는 메시지별로 다르다. lParam 32비트 값이며 전달된 메시지에 대한 부가적인 정보를 가진다. 어떤 의미를 가지는가는 메시지별로 다르다. time 메시지가 발생한 시간이다. p..
Message Loop Message Loop 윈도우즈는 메시지 구동 시스템(Message Driven System)이다. 메시지란 사용자나 시스템 내부적인 동작에 의해 발생된 일체의 변화에 대한 정보이다. 순서를 따르지 않고 주어진 메시지에 대한 반응을 정의하는 방식으로 프로그램이 실행된다. 윈도우즈 프로그램에서 메시지를 처리하는 부분을 메시지 루프라고 한다. 메시지 루프는 메시지 큐에서 메시지를 꺼내 메시지 처리 함수로 보낸다. 보통 WinMain 함수의 끝에 다음과 같은 형식으로 존재한다. while ( GetMessage( &Message, 0, 0, 0 ) ) { TranslateMessage( &Message ); DispatchMessage( &Message ); } BOOL GetMessage( LPMSG lpM..
ShowWindow ShowWindow CreateWindow 함수로 만든 윈도우는 메모리상에서만 존재하므로 출력을 하려면 ShowWindow 함수를 사용해야 한다. BOOL ShowWindow( hWnd, nCmdShow ); hWnd 화면으로 출력하고자 하는 윈도우의 핸들이며 CreateWindow 함수가 리턴한 핸들을 그대로 넘겨주면 된다. nCmdShow 윈도우를 화면에 출력하는 방법을 지정하며 다음과 같은 매크로 상수들이 정의되어 있다. (WinMain 함수의 인수로 전달된 nCmdShow를 그대로 넘겨주기만 하면 된다.) SW_HIDE 윈도우를 숨긴다.SW_MINIMIZE 윈도우를 최소화시키고 활성화시키지 않는다.SW_RESTORE 윈도우를 활성화시킨다.SW_SHOW 윈도우를 활성화시켜 보여준다.SW_SHOWNO..
CreateWindow CreateWindow 윈도우 클래스를 등록한 후에는 등록한 윈도우 클래스를 기본으로 윈도우를 실제 생성해야 한다. 윈도우를 생성할 때는 CreateWindow 함수를 사용한다. HWND CreateWindow( lpszClassName, lpszWindowName, dwStyle, x, y, nWidth, nHeight, hwndParent, hmenu, hinst, lpvParam ) lpszClassName 생성하고자 하는 윈도우의 클래스를 지정하는 문자열이다. WndClass 구조체의 lpszClassName 멤버의 이름을 여기에 기입한다. lpszWindowName 윈도우의 타이틀 바에 나타날 문자열이다. dwStyle 만들고자 하는 윈도우의 형태를 지정하는 인수이다. 일종의 비트 필드값이며 매..
RegisterClass RegisterClass 윈도우 클래스를 정의한 후 RegisterClass 함수를 호출하여 윈도우 클래스를 등록한다. ATOM RegisterClass( CONST WNDCLASS *lpWndClass ); RegisterClass 함수의 인수로 WndClass 구조체의 번지를 넘겨주면 된다. 이런 특성을 가진 윈도우를 앞으로 사용하겠다는 등록 과정이다. WNDCLASS WndClass; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.bhrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH ); WndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); WndClass.hIc..
Window Class Window Class WinMain 함수에서 하는 가장 중요한 일은 윈도우를 만드는 일이다. 윈도우를 만들려면 윈도우 클래스를 먼저 등록한 후 CreateWindow 함수를 호출해야 한다. 윈도우 클래스는 만들어질 윈도우의 여러가지 특성을 정의한다. 윈도우 클래스는 windows.h 에 다음과 같이 정의되어 있는 구조체이다. typedef struct tagWNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName; } WN..
WinMain 헤더파일 windows.h 기본적인 데이터 타입, 함수 원형, 매크로 상수등을 정의 윈도우 프로그래밍에 필요한 기본적인 헤더 파일 포함 시작점 윈도우즈 프로그램의 시작점인 Entry Point 는 main 함수가 아니라 WinMain 이다. int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow ) hInstance 프로그램의 인스턴스 핸들hPrevInstance 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들 없을 경우는 NULL이 되며 Win32에서는 항상 NULL이다. 호환성을 위해서만 존재하는 인수이다.IpszCmdParam 커맨드 라인으로 입력된 프로그램 인수이다. 도스의..