카테고리 없음

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