방법은 물론 많다.
자체 Singleton PropertyMap 을 구축하여 HWND -> CWnd* 로 매핑해도 되고, 사실 이 방법을 써왔다.
또한, MFC 역시 쓰레드 영역마다 이런 맵을 구축하는 것으로 알고 있다.
WINAPI 는 기본적으로 GWLP_USERDATA 라는 것을 hwnd 에 대응하여 소유할 수 있는데, 이를 그런 포인터로 가지는 것도
괜찮은 방법인 것 같다. 여기서는 hwnd 에 App 을 연동했는데 해당 Wnd 클래스에 연동하는게 나을 듯 싶다.
HINSTANCE 에는 USERDATA 넣을 방법이 있는지?
[생성시 연동]
DemoApp *pDemoApp = (DemoApp *)pcs->lpCreateParams;
::SetWindowLongPtrW(
hwnd,
GWLP_USERDATA,
PtrToUlong(pDemoApp)
);
[참고시 연동]
DemoApp *pDemoApp = reinterpret_cast<DemoApp *>(static_cast<LONG_PTR>(
::GetWindowLongPtrW(
hwnd,
GWLP_USERDATA
)));