요점만 얘기하자면, 우리는 윈도우즈에서 메시지 핸들링을 하기 위해 윈도우 프로시저(콜백 함수)를 쓰곤 합니당.  

일반적으로 이 윈도우 프로시저를 이용해 메시지를 처리하는 스타일에는 다음과 같은 것들이 있져.


이 방법을 쓰는 사람은 극히 많지는 않겠지만(책의 예제를 따라하는 경우 정도?), 콜백 함수 내에서 쓸데 없는 변수 선언으로 인한 스택의 낭비.. (위의 예 같은 경우엔 메시지의 개수가 극히 작지만, 메시지의 개수가 늘어나면 그만큼 리소스가 더 낭비되는...), 그리고 일관성이 떨어져 가독성에도 방해가 되죠.

이 방법은 윈도우 프로시저를 가볍게 했지만, 호출 함수의 일관성이 떨어집니다. 다시 말하면, 프로젝트마다 각기 다른 함수가 만들어지겠죠. 예를 OnSize 함수의 경우, 때에 따라서 파라미터로 LPARAM만 필요할 수도 있고, HWND도 필요할 수가 있습니다.

그럼 이제 설명하고자 하는 메시지 크래커~!

매우 짧아진 윈도우 프로시저, 각각의 메시지 핸들러는 항상 동일한 형식만으로 사용되죠. 그리고 윈도우 프로시저 내에서 동일한 매크로를 이용하기 때문에 가독성도 좋아집니다.

하지만 메시지 크래커도 굳이 단점을 찾자면,
첫째, HANDLE_MSG 매크로를 사용하기 위해 항상 windows.h를 include 해야 한다.
둘재, windows.h로부터 함수 원형을 복사해서 써야한다는 점입니다. (귀차니즘..-ㅁ-)


그래도, 비효율적이고 가독성이 나빠지는 것보단 낫다는 생각이 듭니다.

그럼, 사용법은?

1. windows.h 를 include 합니다.
2. 윈도우 프로시저에 HANDLE_MSG 매크로를 추가합니다.
3. windows.h 파일을 열어 ctrl + f를 이용해 메시지(EX: WM_CLOSE)를 찾아, 함수 원형을 찾습니다.

4. 주석으로 처리된 함수 원형 부분 중 Cls_를 뺀 나머지 부분을 복사해서 소스코드에 함수 정의부와
선언부에 붙여넣기를 해서 씁니다.

5. OnClose() 함수 내에 처리하고자 하는 루틴을 추가합니다.

덧 1.) 메시지 크래커에 관한 더 많은 내용은 "김정훈 저, [TCP/IP 소켓 프로그래밍]"과 웹 검색을 통해 찾을 수 있습니다.-ㅁ-;

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 노헝그리

2007/04/17 11:20 2007/04/17 11:20
,
Response
No Trackback , 2 Comments
RSS :
http://www.nohungry.net/tt1/rss/response/74


블로그 이미지

뽐뿌가 없으면 블로그도 없다.

- 노헝그리

Archives

Calendar

«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Site Stats

Total hits:
129859
Today:
41
Yesterday:
93