참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms632679(v=vs.85).aspx
HWND WINAPI CreateWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName,
_In_ DWORD dwStyle,
_In_ int x,
_In_ int y,
_In_ int nWidth,
_In_ int nHeight,
_In_opt_ HWND hWndParent,
_In_opt_ HMENU hMenu,
_In_opt_ HINSTANCE hInstance,
_In_opt_ LPVOID lpParam
);
이 lParam에 원하는 데이터를 파라미터로 넘길 수 있다.
RegisterClassEx에서 사용할 WNDCLASSEX구조체 변수에 지정한 WndProc함수 (콜백함수)에는 다음과 같이 메시지가 들어온다.
LRESULT CALLBACK func(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
case WM_CREATE:
lParam;
break;
...
}
여기서 lParam은 CREATESTRUCT로 들어온다.
CreateStruct관련자료 (MSDN)
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632603(v=vs.85).aspx
CREATESTRUCT구조체의 데이터 중, LPVOID lpCreateParams;가 있는데, 여기에 아까 CreateWindow를 할때 넘겨준 lParam이 들어온다.
즉, 콜백함수의 WM_CREATE 메시지에서 인자로 넘긴 데이터를 받으려면 다음과 같이 호출
윈도우 생성:
MyObj pObj;
CreateWindow( params... ,(LPVOID)&pObj);
LRESULT CALLBACK func(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch( uMsg)
{
case WM_CREATE:
LPCREATESTRUCT lpst = (LPCREATESTRUCT)lParam;
PMyObj pObj = (PMyObj)lpst->lpCreateParams;
}
}
이런식으로 원하는 데이터를 넘겨받을 수 있다.
댓글