개별 메세지 함수
- 각 메세지(WM_CREATE, WM_DESTROY등)가 왔을 때 전용으로 처리하는 함수를 만듬. 스택 공간이 절약될 수 있다.
예시)
LRESULT onCreate(HWND hWnd, WPARAM wParam, LPARAM lPARAM);
LRESULT WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lPARAM)
{
switch(iMessage)
{
case WM_CREATE:
return onCreate(hWnd,wParam,lParam);
...
}
메세지 크래커
windowsx.h에 정의되어 있으며 메세지에 특화된 메세지 크래커 함수를 프로그래머가 사용하면 된다.
#include<windowsx.h>
BOOL MsgCrk_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
LRESULT WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lPARAM)
{
switch(iMessage)
{
HANDLE_MSG(hWnd, WM_CREATE, MsgCrk_OnCreate);
...
}
#define HANDLE_MSG(hwnd, message, fn) \
case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
#define HANDLE_WM_SIZE(hwnd, wParam, lParam, fn) \
((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
위의 매크로 함수에 의해 아래처럼 변한다.
'컴퓨터 공부 > Win32 API 프로그래밍' 카테고리의 다른 글
[5월 7일 1교시] 공통 컨트롤 2 (0) | 2009.05.07 |
---|---|
[숙제] 메세지 크래커 (0) | 2009.05.06 |
[5월 6일 2교시] 서브클래싱 + 후킹 (0) | 2009.05.06 |
[5월 6일 1교시] 메세지2 (0) | 2009.05.06 |
[스터디] 윈도우즈 API 정복2 - 35장 레지스트리. (0) | 2009.05.06 |