클래스 멤버함수로 콜백함수 만들어서 생성자에서 등록할려 하니까 


static이 아니라서 등록 못한다 하더라구요 


// Header class Foo { public: Foo(); ~Foo(); static LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM); private: LRESULT CALLBACK MyWinProc(HWND, UINT, WPARAM, LPARAM); static Foo *m_pInstance; } // Implementation #include "Foo.h" Foo * Foo::m_pInstance = NULL; Foo::Foo() { m_pInstance = this; } Foo::~Foo() { } LRESULT CALLBACK Foo::WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return m_pInstance->MyWinProc(hWnd, message, wParam, lParam); } LRESULT CALLBACK Foo::MyWinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hWnd, message, wParam, lParam); }


해법을 찾아보니 이런식으로 해결하던데 

싱글턴 냄새가 나는 해결법 처럼 보이는데 


해설..좀 해줄수 있으신분 계신가요 


질문 1. 생성자에서  m_pInstance = this; 자기 자신을 넣는데 이러면  인스턴스 새로 만들때마다 바뀌지 않는가? 


질문 2. 굳이 이렇게 돌려서 해야하는 근본적인 이유. (왜 멤버함수인 콜백함수를 wndclass를 등록할수 없는지) 


제가 모자란 부분이 많아서 설명 해주시면 감사하겟습니다.


위의 소스코드를 구한 링크입니ㅏㄷ. 


http://stackoverflow.com/questions/17221815/why-cant-my-wndproc-be-in-a-class