HWND : 윈도우 관리 클래스(callback 함수포함)
{
}
1 : 1
WNDPROC은 전역 callback 통해 윈도우 관리 클래스::callback 서브클래싱 해야 함
여기서 1 : 1 로 만들어지는 hwnd : 윈도우 관리 클래스를
동적으로 다수를 처리가능 하게 하고 싶다 물론 동일비로.(2:2.. n:n...)
일단 기본형...
class CWindow{
public:
LRESULT wndproc((HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
};
// 서브클래싱
LRESULT CALLBACK gFN_msgproc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
_Assert(DATA::g_pWindow);
if(DATA::g_pWindow)
return DATA::g_pWindow->wndproc(hWnd, Msg, wParam, lParam);
else
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
윈도우를 생성할때 WNDPROC을 지정하든 중간에 바꿔치든 gFN_msgproc 를 거쳐 CWindow::wndproc 가 호출되겠지?
자 여기서 gFN_msgproc 에서 자기 HWND에 대응하는 CWindow를 알아야 한다.
1. global/static 에서 map/vector 등을 이용해 CWindow::wndproc를 호출한다.
2. 템플릿 생각해봤는데 이건 너무 정적이라 불가능
template<CWindow* pOBJ>
LRESULT CALLBACK gFN_msgproc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
pOBJ->wndproc
}
물론 이중 포인터와 전역 넉넉한 배열을 이용하면 가능하나 포인터를 두 번 거쳐야 해서 성능상 좀 그렇다.
정적인 배열크기도 나중에 귀찮은 문제고
(1) 보다 빠른 좋은 생각 있으면 말해봐라
프갤 고수님들
왜 비추를 박아유ㅋㄷㅋㄷ
프갤에서 코딩 이야기해서 심기불편?