본문 바로가기

ATL

CShellFileOpenDialog / CShellFileSaveDialog 사용하기 WTL의 CShellFileOpenDialog / CShellFileSaveDialog는 비스타 이상에서 지원되는 대화상자 컨트롤이다. 이들은 전통적인 대화 상자와 달리, 탐색기과 같은 스타일을 가진다. CShellFileOpenDialog / CShellFileSaveDialog를 사용하려면 WTL의 atldlgs.h를 먼저 포함해야 한다. 이 대화 상자들이 인스턴스화 될 때 플랫폼이 비스타 이상이 아니라면, 인스턴스의 m_spFileDlg는 널(null)이다. 플랫폼이 비스타가 아닐 수도 있다면, 윈도우 버전을 확인하는 절차가 필요할 것이다. 이들은 고전적인 대화 상자와 달리 CShellMultiFileOpenDialog와 같은 클래스가 존재하지 않으며, COM 인터페이스를 사용하여 대화 상자를 조정.. 더보기
ATL/WTL 멀티미디어 타이머 사용하기 WTL을 사용할 때 WM_TIMER 메세지가 때때로 오지 않을 경우가 있다. 현재 실행하고 있는 프로세스 안에서 무엇인가가 바쁘게 돌아가고 있다면 WM_TIMER 메세지가 제대로 오지 않을 수도 있다. 어떤 일을 타이머에 맞춰서 간단하게 처리하고 싶을 때, 딱 이런 목적으로 만들어진 WM_TIMER가 제대로 동작하지 않는다면 곤란할 것이다. 그러나, 다른 스레드에서 그 정도로 복잡한 일을 하고 있어서 메세지가 제대로 오지 않는다면, WM_TIMER를 쓰는 것은 맞지 않다. WM_TIMER는 메세지 처리 과정에서 우선 순위가 낮으며, 경우에 따라서 윈도우가 무시해버릴 수도 있기 때문이다. 이런 경우, 멀티미디어 타이머를 사용하는 것이 좋다. 멀티미디어 타이머는 WM_TIMER와 달리 다른 스레드에서 생성되.. 더보기
MFC와 ATL/WTL에서의 메세지 전달 메커니즘 C/C++을 사용하여 간단한 Windows Application을 만든다고 할 때, MFC나 ATL과 같은 커다란 라이브러리를 사용하는 것은 달갑지 않은 일이다. MFC로 빌드하여 생성되는 바이너리와 링크되는 DLL의 크기는 무시할 수 없을 정도이며, ATL의 경우 코드의 크기는 매우 작지만 단순히 코드의 크기가 이 글의 주제는 아니다. 중요한 프로젝트에 사용할 일이 아니라면, 사용자 인터페이스가 잘 포장되어 있는 이런 라이브러리를 사용하는 것이 마냥 좋다고는 할 수 없다. 편리한만큼 라이브러리 디자인의 발상과 내부 구현 기법을 지나치기 쉽기 때문이다. MFC와 ATL은 비슷한 메세지 전달 방식을 가지고 있지만, 그 구현 방법은 매우 다르다. 가장 큰 이유는 MFC가 만들어질 당시에는 C++ 표준이란게 .. 더보기
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는 그야말로 인터페이스만 가지고 있으며, 윈도우에 필요한 핸.. 더보기