이번에는 WinProc의 함수를 보겠습니다.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 메뉴 선택을 구문 분석합니다:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다...
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
메세지가 발생하면 case에 따라서 코드가 발생하게 된다.
case WM_MOUSEMOVE:
{
long result = MessageBox(hWnd, TEXT("HELLO, API"), TEXT("FIRST"), MB_OKCANCEL); //hWnd -> 주체 MB_OK -> 중요!ok라는 버튼 나오게
//modal box --> 자식이 나타났을 때 부모 제어 불가능 <--> modalless
//MB_OKCANCEL --> return 값이 있다 return 값이 1
if (result == IDOK) {
MessageBox(hWnd, TEXT("ok"), TEXT("ok"), MB_OK);
}
else {
MessageBox(hWnd, TEXT("ng"), TEXT("ng"), MB_OK);
}
}
break;
이 코드를 추가한다.
WM_MOUSEMOVE 는 마우스가 움직일 때마다 메세지가 발생한다.
MessageBox(발생시킬 주체, 메세지박스 내용, 메세지박스 title , 메세지박스 설정(MB_OKCANCEL - ok 와 cancel버튼있음)
modal box => 자식(메세지박스)이 나타냈을 경우 부모(윈도우창) 제어 불가능
그리고 ok(1)나 cancel(0)이 나타났을 경우 버튼을 누르면 return 값이 나오게 되는데 그것을 result에 넣는다.
if(result == 1) 라고 해도 되지만 가독성 때문에 IDOK 라는 것이 있다.
번외로 디버깅 하는 방법
{
WCHAR Str[32];
static int ct = 0;
wsprintf(Str, TEXT(" CHAR :%d \n"), ct++);
OutputDebugString(Str);
}
이 코드를 넣어서 디버깅 시킨후에 출력창에서 보면서 디버깅하거나
{
printf("test\n");
}
이런식으로 #include <stdio.h>를 넣어서 콘솔창에서 확인 하거나
BreakPoint를 활용한다.
f9 -> breakpoint 나타내기
f5 -> 디버깅 or 다음 breakpoint까지 가기
f10 -> 한줄씩 실행
shift+ f5 -> 디버깅 끝내기
ctrl + f10 -> 선택한 줄까지 디버깅하기
f11 -> 디버깅 하다가 어떤 함수를 만났을 때 그 함수안에 들어가서 디버깅하기
'비트교육 > API' 카테고리의 다른 글
API(6) -WinMain함수 알아보기 (0) | 2020.09.05 |
---|---|
API(5) -WM_PAINT에 대해 알아보기! (0) | 2020.09.03 |
API(4) -win32의 WndProc에 대해 알아보기! (0) | 2020.09.03 |
API(2) (0) | 2020.09.03 |
API(1) (0) | 2020.09.03 |