본문 바로가기

Windows Template Library

Windows Template Library Startup 3 이제 원하는 윈도우의 메세지 핸들러까지 작성했으니, 실제로 WTL 프로그램의 인스턴스화 작업을 준비해보자. PCH를 사용할 stdafx.h과 윈도우 메세지 핸들러를 구현한 mywnd.h가 준비되었다면, 다음은 MFC를 오랫동안 사용해온 사람에게는 기억에서도 흐릿할 WinMain이다. #include "stdafx.h" #include "mywnd.h" CAppModule _Module; 이제, WTL의 MFC에서의 CWinApp에 해당하는 CAppModule을 전역 변수로 선언한다. CAppModule은 ATL의 CComModule을 상속받은 것이며, CWinApp와 비슷한 역할을 하지만 그 성격은 좀 다르다. VC7 이상에서는 이것을 명시적으로 선언할 필요는 없지만, 메세지 루프를 등록하고 윈도우 메세.. 더보기
Windows Template Library Startup 2 WTL을 사용하여 윈도우를 생성하는 것은, 기본적으로 ATL의 윈도우 생성 방식과 동일하다. WTL은 어느 날 갑자기 새롭게 생긴 혁신적인 물건이 아니라, ATL의 골격에 살을 덧붙인 것이다. WTL의 interface / implementation 분리 정책은 사실 ATL에서 온 것이며, ATL이 템플릿을 적극적으로 활용하는 것 또한 HP의 STL 구현 경험에서 영향을 받은 것이다. WTL을 이해하기 위해는, 먼저 ATL의 윈도우 생성, 메세지 전달 방식을 이해해야 한다. ATL에서의 MFC CWnd와 같은 존재라면 CWindow인데, CWindow는 CWnd과 같지 않다. 인터페이스와 구현 모두를 가지고 있는 CWnd과 비교해서 CWindow는 그야말로 인터페이스만 가지고 있으며, 윈도우에 필요한 핸.. 더보기
Windows Template Library Startup 1 WTL을 프로젝트에 이용하기로 마음 먹었다면, PCH(Precompile Header)를 사용하는게 좋다. 대부분의 C++ 컴파일러가 아직 export 키워드를 구현하지 않았기 때문에, 분할 컴파일 모형을 적용할 수 없으며, 템플릿 라이브러리는 아직까지 대부분 헤더 파일만의 형태로 제공된다. 완전히 빈 상태인 stdafx.h와 같은 PCH에서 출발한다면, 다음과 같은 내용이 포함되어야 한다. stdafx.h #include // base ATl classes #include // base WTL classes #include // ATL GUI classes #include // WTL frame window classes #include // WTL enhanced msg map macros #incl.. 더보기
Windows Template Library Installation 사실, WTL과 같은 고전적인 C++ 라이브러리는 MS 입장에서는 더 이상 강력하게 추진할만한 것은 아니다. 무엇보다 .NET이란 대단한 물건을 가지게 되었기 때문인데, 기존의 MFC와 ATL 조합이 복잡하기는 해도 기존의 요구는 그런대로 처리할 수 있기 때문이다. MS에서 WTL을 공식적으로 지원하지 않으며, 오픈 소스로 공개한 것은 위와 같은 이유 때문이다. VMS 유전자를 이어받은 NT 기반 이후의 윈도우들이, 그 특성상 개발 문화가 단일화되고, 전문적이며, 무거워지는 뚜렷한 경향을 보이는 것을 생각한다면, 이러저러한 이유로 오픈 소스로 공개된 WTL은 Windows 최후의 캐주얼한 개발 문화의 상징이라 해도 될 것 같다. ATL은 COM 컴포넌트를 만드는데 대단히 유용한 툴이지만, 전통적인 윈도우.. 더보기
WTL을 사용할 때 주의할 점 Window Template Library(WTL)은 MFC에 비해 아주 작고 빠른 코드를 만들어 낼 수 있으며, 그 구조 또한 MFC와 비교되지 않을 정도로 깔끔하다. MFC 클래스들의 경우, CObject에서부터 개체를 상속 받기 때문에, CWnd에 이르러서는 엄청난 크기를 가진다. 즉, CWnd를 생성하는 것은 대단히 비싼 일이다. 반면, WTL은 interface / implementation이 엄격하게 분리된 구조로 설계되었다. CWnd에 해당하는 WTL의 CWindow은 사실 데이터멤버 밖에 가지고 있지 않으며, 크기가 매우 작다. 따라서, MFC처럼 CWnd 개체를 파라미터나 리턴값으로 사용하기 위해 상대적으로 TemporaryMap을 유지할 필요가 없으며, 이것은 MFC처럼 Idle 타임에.. 더보기
WTL, Windows Template Library MFC는 강력한 클래스 라이브러리이다. Win32 API로 Windows 프로그래밍을 하는 것은, Windows 프로그래밍을 배울 때가 아니라면 이 방법으로 실제로 일하는 것은 엄청난 시간이 걸리는 일이고, 그럼에도 불구하고 원하는 기능을 제대로 구현할 수 있을지 여부도 장담할 수 없다. 왜냐하면, MSDN에서 API에 대한 설명이 잘 되어 있다고 하더라도, 그 API를 처음부터 조합해서 원하는 기능을 만들어내는 것은 쉬운 일이 아니기 때문이다. API만 사용해서 ActiveX 컨트롤을 만든다고 생각해보라. 끔찍하지 않은가? MFC는 사실 잘 구성되어 있는 클래스 라이브러리가 아니다. API를 래핑하는 구조에서 크게 벗어나지 못하고 있고, CObject에서 파생되어 나가는 구조라 가장 자주 쓰이는 CWn.. 더보기