-
#include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR IpszClass = TEXT("First"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int nCmdShow) { HWND hWnd; WNDCLASS WndClass; MSG Message; g_hInst = hInstance; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hInstance = hInstance; WndClass.lpfnWndProc = WndProc; WndClass.lpszClassName = IpszClass; WndClass.lpszMenuName = NULL; WndClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&WndClass); hWnd = CreateWindow(IpszClass, IpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL); ShowWindow(hWnd, nCmdShow); while (GetMessage(&Message, NULL, 0, 0)) { TranslateMessage(&Message); DispatchMessage(&Message); } return (int)Message.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch (iMessage) { case WM_DESTROY: PostQuitMessage(0); return 0; } return (DefWindowProc(hWnd, iMessage, wParam, lParam)); }
이어서 소스분석을 계속한다.
[윈도우 클래스]
WinMain에서 WndClass가 눈에 많이 띄일것이다.
해당 클래스는, 먼저 틀을 꾸며준후, CreateWindow를 호출해 창을 생성해야한다.
WndClass는 windows.h안에 정의되어있다.
클래스 멤버들이다.
해당 멤버들이 각각 창을 꾸민다.
각각의 멤버들이하는역할은 msdn에서 찾아볼수있다.
[RegisterClass]
RegisterClass함수의 인수로 WNDCLASS구조체의 번지를 전달한다.
[윈도우 생성]
윈도우 생성은 WndClass로 각각 초기화해준후에 CreateWindow함수를 호출시켜 창을 생성한다.
HWND CreateWindow(...)
msdn에서 해당 함수를 검색하면 인자에대한 설명들이 나온다. 참고하길 바란다.
BOOL ShowWindow(hWnd, nCmdShow);
nCmdShow인자에 매크로상수들은 검색해보길바란다.
창이 만들어지기까지의 과정
WndClass정의 -> RegisterClass함수로 WndClass구조체번지전달 -> CreateWindow함수로 윈도우생성 -> ShowWindow로 윈도우표시 -> 메시지루프(사용자로부터 메세지를처리)
'C/C++' 카테고리의 다른 글
[API]WM_PAINT (0) 2015.03.12 [API]TextOut (0) 2015.03.12 [API]WndProc (0) 2015.03.12 [API]Message Loop (0) 2015.03.12 API 기초 (0) 2015.03.12