카테고리 없음
Win32 API - 윈도 생성의 class 화
써드아이
2009. 2. 27. 23:17
CWinClass 라는 이름의 클래스를 만들고 멤버 함수로 각각의 WM_ 메세지에 대한 핸들러를 작성해 두었다.
그런데 문제는 WndProc이다
이놈을 CWinClass의 멤버 함수로 둘까? 일반 함수로 둘까??
클래스의 멤버 함수로 둘 경우 WNDCLASS의 lpfnWndProc 에 대입할 때 문제가 된다.
이 놈이 C 스타일의 함수만 인자로 받는다나 어쨌다나...
1. WndProc을 일반 함수로 두는 경우를 생각해보면
우선 쉬운 방법이다. 하지만 메세지 핸들러가 클래스 안에 존재하기 때문에 이 클래스의 인스턴스를 전역으로 선언해야한다. (WndProc의 구조상 파라메터로 넘겨줄 수 없기에..) 하나의 윈도우(메인)만 생성할 때는 문제가 없지만, 자식 윈도우를 생성한다면?? 자식 윈도우가 다시 자식 윈도우를 생성한다면???
생성되는 모든 윈도우에 대한 인스턴스를 전역으로 선언해두는것은 좋은 방법이 아니다.
pass~
2. WndProc을 클래스의 멤버 함수로 구현하는 경우
WNDCLASS.lpfnWndProc = &CWinClass::WndProc 과 같이 대입할 수 있을거라 생각했다.
컴파일 에러 난다.
"MFC 구조와 원리"라는 책에서 본 내용을 따라해 봤다.
typedef LRESULT (CWinClass::*WinClassProc)( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam );
static WinClassProc fpWinClassProc;
fpWinClassProc = &CWinClass::WndProc;
역시나 컴파일 에러 난다.
CWinClass의 WndProc 멤버 함수를 static으로 선언해 봤다.
이전에 났던 에러는 피해갔지만 다른 에러를 쏟아 냈다.
각 메세지에 대한 핸들러의 호출을 "비정적 멤버 함수를 잘못 호출했습니다." 라며 컴파일을 거부했다.
다시 서핑서핑서핑~
발견!!!!
그치만 좀 많이 어렵다. -_-;;
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=7338&ref=7338
http://blog.naver.com/blueslame?Redirect=Log&logNo=110003931710
공부 좀 더 해야겠는걸....
http://blog.naver.com/guriis?Redirect=Log&logNo=40005585301