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) 보다 빠른 좋은 생각 있으면 말해봐라