winapi 콜백함수에 대해서 질문 있습니다.
학부생3학년(58.227)
2016-04-29 22:29
추천 0
클래스 멤버함수로 콜백함수 만들어서 생성자에서 등록할려 하니까
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
메서드가 파라미터를 받잖아
이게 근본적으로 this포인터를받아서 그런걸거야 콜백으로 인자를 줄때 this가 딸려들어감
STL넘길때 쓰는 함수 이썼는데 그걸로 래핑하면 될듯
객체.메서드(...) 이케있으면 사실은 메서드(const &객체, ...) 이런꼴이라