컴퓨터 공부/Win32 API 프로그래밍

[5월 6일 3교시] 메세지 크래커 + 공통 컨트롤 1

려리군 2009. 5. 6. 16:15

개별 메세지 함수

 - 각 메세지(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)

위의 매크로 함수에 의해 아래처럼 변한다.

case WM_SIZE:
        return MsgCrk_OnSize(hWnd, wParam, LOWORD(lParam),HIWORD(lParam));

공통 컨트롤(Common Controls)
#include<commctrl.h>
#pragma comment(lib,"conctl32.dll")
InitCommonControls계열 함수 필요.

BOOL InitCommonControlsEx(const LPINITCOMMONCONTROLSEX lpInitCtrls);
Common Control DLL에서 특정 공통 컨트롤들을 선택한다.
리턴 : 성공시 TRUE, 실패시 FALSE

프로그래스 
스타일 : PBS_SMOOTH, PBS_VERTICAL
메세지
PBM_SETRANGE : 움직일 수 있는 범위 지정, MAKELPARAM(최대, 최소)
PBM_SETPOS : 현재 프로그레서 위치 지정, WPARAM(위치)