본문 바로가기

PreTranslateMessage

WTL을 사용할 때 주의할 점 Window Template Library(WTL)은 MFC에 비해 아주 작고 빠른 코드를 만들어 낼 수 있으며, 그 구조 또한 MFC와 비교되지 않을 정도로 깔끔하다. MFC 클래스들의 경우, CObject에서부터 개체를 상속 받기 때문에, CWnd에 이르러서는 엄청난 크기를 가진다. 즉, CWnd를 생성하는 것은 대단히 비싼 일이다. 반면, WTL은 interface / implementation이 엄격하게 분리된 구조로 설계되었다. CWnd에 해당하는 WTL의 CWindow은 사실 데이터멤버 밖에 가지고 있지 않으며, 크기가 매우 작다. 따라서, MFC처럼 CWnd 개체를 파라미터나 리턴값으로 사용하기 위해 상대적으로 TemporaryMap을 유지할 필요가 없으며, 이것은 MFC처럼 Idle 타임에.. 더보기
윈도우 메세지와 메세지 큐 너무나 잘 알려진 이야기지만, 윈도우는 Event Driven 방식에 의해서 동작한다. 윈도우는 메세지 큐를 가지고 있으며, 윈도우가 생성하는 메세지는 이 메세지 큐를 이용하여 처리된다. 그렇지만, 중요한 것은 모든 메세지가 메세지 큐에 저장되는 것은 아니라는 점이다. 예를 들어, MFC의 CWnd 파생 개체들은 PreTranslateMessage()라는 메서드에서 메세지 큐에 들어있는 메시지를 미리 처리할 수 있는 기회를 가질 수 있는데, 가끔 원하는 메세지를 찾을 수 없는 경우가 있을 것이다. 그 이유는, 윈도우가 특정 메세지는 메세지 큐로 보내지 않고 바로 처리하기 때문이다. 또, 특정 메세지는 반드시 처리한다는 보장도 없다. 그러한 메세지 중 대표적인 것인 WM_TIMER 메세지이다. WM_TIM.. 더보기