Notice
Recent Posts
Recent Comments
Link
bdfgdfg
Win32 API 구조 - 1 본문
반응형
Win32 API
- WinMain,WndProc가 주요.
- Winmain -> 윈도우 구조체 등록,생성
-> 메시지 루프, 메시지 체크와 전달
-> os에서 관리하는 메시지 큐를 통해 들어온 메시지를 들어온 순서대로 처리한다.
-> WinMain함수는 메시지 루프에서 무한반복을 하고 메시지큐에 종료를 하라는 메시지가 들어오면 반복문을 탈출하면서 종료
WndProc
- 메시지를 처리한다
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rcLine = { 50, 50, 700, 150 }; //선의 좌표영역
RECT rcEllipse = { 50, 300, 700, 150 }; //원의 크기
RECT rcRectAngle = { 50, 330, 700, 550 }; //사각형의 크기
switch (iMsg) //메시지 처리
{
case WM_CREATE:
break;
case WM_PAINT: // 그리기 메시지
//그리기 시작
hdc = BeginPaint(hwnd, &ps);
//그리기 코드
/* 직선그리기 */
MoveToEx(hdc, rcLine.left, rcLine.top, NULL); //선 시작 지점
LineTo(hdc, rcLine.right, rcLine.bottom); //선 끝 지점
/* 원 그리기 */
Ellipse(hdc, rcEllipse.left, rcEllipse.top, rcEllipse.right, rcEllipse.bottom);
/* 사각형 그리기 */
Rectangle(hdc, rcRectAngle.left, rcRectAngle.top, rcRectAngle.right, rcRectAngle.bottom);
//그리기 종료
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam); //처리되지 않은 메시지 반환
}
iMsg로 들어온 '값'에 의해 switch문에 따라 적절히 처리가 가능하다.
메시지 전달과 처리과정
MSG msg;
// 기본 메시지 루프입니다:
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
메시지를 처리하는 것은 WndProc. 메시지를 전달하는 것은 메시지 루프.
GetMessage는 메시지가 생기면 while내부로 들어가 처리를 하고. 메시지가 없다면 무한대기.
참고로 게임에서는 PeekMessage를 사용한다. (어떠한 입력(메시지)등이 없더라도 게임은 돌아가야하기 때문)
메시지가 발생하여 GetMessage가 통과가 되면 TranslateMessage에는 우리의 키보드 입력에 대한 처리를 해주고
DispatchMessage는 메시지를 WndProc에게 보내준다.
(DispatchMessage에 의해 호출되는 콜백함수.)
반응형
'게임프로그래밍 > Win32 API' 카테고리의 다른 글
키보드와 마우스 (0) | 2021.09.26 |
---|---|
WinAPI 그래픽 (0) | 2021.09.25 |
Winapi 구조 - 2 (0) | 2021.09.25 |
PeekMessage와 GetMessage, 키입력 (0) | 2021.09.22 |
Win32 API 프로그래밍 (0) | 2021.09.12 |
Comments