1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
LRESULT CALLBACK WndProc(
HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM TParam) {
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default :
break;
};
return DefWindowProc(hWnd, msg, wParam, TParam);
};
|
cs |
WndProc 윈도우 프로시저 함수
윈도우에서 이벤트가 발생할때마다 호출되며
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// 유니코드 사용 wWinMain
int WINAPI wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
// 생성할 윈도우 클래스 운영체제 등록
WNDCLASSEXW wc;
ZeroMemory(&wc,sizeof(WNDCLASSEXW));
wc.cbSize = sizeof(WNDCLASSEXW);
wc.hInstance = hInstance;
// 가로 세로 Draw
wc.style = CS_HREDRAW | CS_VREDRAW;
// 클래스 이름으로 등록 하였기 때문에
// 다음에 찾을때 이 이름으로 찾아야함
wc.lpszClassName = L"KGCAWIN";
// 프로시저 등록
wc.lpfnWndProc = WndProc;
wc.lpfnWndProc= WndProc;
// 백그라운드 Color 를 설정한다.
wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
//// 마우스 커서 세팅
//wc.hCursor = LoadCursor(NULL, IDC_IBEAM);
//// 윈도우 창 아이콘을 바꾼다.
//wc.hIcon = LoadIcon(NULL, IDI_QUESTION);
// WNCCLASSEXW 구조체의 내용을 바탕으로 등록
if (RegisterClassEx(&wc)==false) {
return 1;
}
// 2. 등록된 윈도우 클래스로 윈도우 생성
// 하나의 프로세스에서 여러개의 윈도우 창을
// 띄울수 있으며 각각의 윈도우 창을 관리하는 핸들을
// 반환한다.
auto hWnd = CreateWindowExW(0,
/*WNDCLASSEXW 이름으로 반드시 설정*/
//_In_opt_ LPCWSTR lpClassName,
L"KGCAWIN",
/*_In_opt_ LPCWSTR lpWindowName,*/
// 내가 하고싶은 이름으로 설정
L"SAMPLEWINDOW",
WS_OVERLAPPEDWINDOW,
//_In_ DWORD dwStyle,
// 윈도우의 시작 좌표와 크기를 설정한다.
/*_In_ int X,
_In_ int Y,
_In_ int nWidth,
_In_ int nHeight,*/
100, 100, 300, 300, 0, 0, hInstance, 0);
if (hWnd == NULL)return 1;
ShowWindow(hWnd, SW_SHOW);
//GetMessage(&msg) = 운영체제의 MessageQueue 에서
// 메시지를 가지고 온다. (키가 눌렸다는것을 알려준다)
// GetMessage window msg queue 에서 큐가
// 비었을 경우 GetMessage 는 리턴하지않고 대기한다
// 즉 게임에서는 쓸모가 없다...
//PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)
// PM_REMOVE 파라미터를 지정해주면
// 메시지 큐에서 메시지를 가져온 이후 큐에서 메시지를 지우며
// 지정하지 않으면 지우지 않는다.
// TranslateMessage(&msg) ;
// 해당 키를 해석한다 (무슨 키가 눌렸는지)
// DispatchMessage(&msg)
// 해당 메시지를 바탕으로 윈도우 프로시저를 호출한다.
// 메시지를 전부 처리 하고나서 Frame Render 를 호출한다
MSG msg;
auto Run{ [] {} };
while (true) {
while (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
if (msg.message == WM_QUIT)
break;
else {
Run();
/*CoreFrame();
CoreRender();*/
}
}
}
return 0;
};
|
cs |