본문 바로가기
Programming/Tips(C++,C#)

CreateWindow함수로 파라미터를 넘길 때.

by 곰네Zip 2013. 10. 17.

참조 : 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;

    }

}

 

이런식으로 원하는 데이터를 넘겨받을 수 있다.

반응형

댓글