
PeekMessage
- 메시지를 가져오는 함수
⑴GetMessage(): 무한대기
-> 메시지 큐에 메시지가 없다면 새로운 메시지가 전달될 때까지 리턴하지 않는다.
즉, 메시지가 없을 경우, 무한 대기
⑵PeekMessage(): 바로리턴
-> 큐에 메시지가 없더라도 리턴할 수 있다.
PeekMessage() 함수를 활용해 유휴 시간에 다른 작업을 할 수 있다.MSG msg;
while (true)
{
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)
{
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
Dispatch(&msg);
}
false면 else문으로 넘어간다. else
{
HDC hdc = GetDC(hwnd);
SetPixel(hdc, rand()%500
...
}
}
메시지의 명칭 -> 매크로 상수로 나타낸다.
⑴ WM_CREATE - 1
⑵ WM_DESTROY - 2
⑶ WM_MOVE * 3
⑷ ...
사용자 정의 메시지를 만드려면
나만의 메시지를 만들어야 하고,
그때 기존 메시지의 ID값과 중복되면 안된다.
- 사용자 메시지를 사용하는 절차
⑴ 나만의 메시지를 정의한다
#define WM_CREATE 0x001
⑵ 메시지를 발생시킨다 (특정 시점에서 메시지를 호출)
① 비큐 :SendMessage(핸들, WM_CREATE, 부가정보, 부가정보)
② 큐 :PostMessage(핸들, WM_CREATE, 부가정보, 부가정보)
⑶ 메시지를 수신 및 처리한다.
WndProc(프로시저)switch~case문으로 필터링 ..
#define WM_MYMESSAGE1 WM_USER+100
SendMessage() : 비큐, 함수 호출과 동일하다 (리턴값을 받을 수 있다.)case WM_LBUTTONDOWN:
{
int r = SendMessage(hwnd, MY_MESSAGE1, 10, 20);
TCHAR buf [20];
wsprintf(buf, TEXT("결과 : %d"), r);
MessageBox(hwnd, , TEXT("결과"), MB_OK);
return 0;
}case MY_MESSAGE1:
{
TCHAR buf [100];
wsprintf(buf, TEXT("%d + %d = %d"), wParam, lParam, wParam + lParam);
SetWindowText(hwnd, buf);
MessageBox(hwnd, TEXT("수신확인"), TEXT("MY_MESSAGE1"), MB_OK);
return wParam + lParam;
}
|  |  |  |
⑴ 나만의 메시지 정의
#define MY_MESSAGE2 WM_USER+101
⑵ 메시지 발생 (메시지 호출하기)
PostMessage() : 큐 함수case WM_RBUTTONDOWN:
int b = PostMessage(hwnd, MY_MESSAGE2, 10, 20);
TCHAR buf [20];
wsprintf(buf, TEXT("성공 : %s"), b==true ? TEXT("YES"):TEXT("NO"));
SetWindowText(hwnd, buf);
MessageBox(hwnd, buf, TEXT("결과"), MB_OK);
return 0;
⑶ 수신 및 처리
case MY_MESSAGE2:
{
TCHAR buf [100];
wsprintf(buf, TEXT("%d + %d = %d"), wParam, lParam, wParam + lParam);
SetWindowText(hwnd,buf);
MessageBox(hwnd, TEXT("수신확인"), TEXT("MY_MESSAGE2"), MB_OK);
return 0;
}
|  |  |  |