본문 바로가기

MFC

MFC와 ATL/WTL에서의 메세지 전달 메커니즘 C/C++을 사용하여 간단한 Windows Application을 만든다고 할 때, MFC나 ATL과 같은 커다란 라이브러리를 사용하는 것은 달갑지 않은 일이다. MFC로 빌드하여 생성되는 바이너리와 링크되는 DLL의 크기는 무시할 수 없을 정도이며, ATL의 경우 코드의 크기는 매우 작지만 단순히 코드의 크기가 이 글의 주제는 아니다. 중요한 프로젝트에 사용할 일이 아니라면, 사용자 인터페이스가 잘 포장되어 있는 이런 라이브러리를 사용하는 것이 마냥 좋다고는 할 수 없다. 편리한만큼 라이브러리 디자인의 발상과 내부 구현 기법을 지나치기 쉽기 때문이다. MFC와 ATL은 비슷한 메세지 전달 방식을 가지고 있지만, 그 구현 방법은 매우 다르다. 가장 큰 이유는 MFC가 만들어질 당시에는 C++ 표준이란게 .. 더보기
WPF는 Win32를 대체하는 것인가? Windows Form 이후, WPF라는 물건을 접하면 대단히 놀라게 된다. 일단, WPF를 위시한 .NET Framework 3.0이 과거 WinFX로 알려졌던 것처럼, 20년간 윈도우 프로그래밍을 지배해온 Win32 기반의 프로그래밍이 드디어 대체되나 하는 기대를 했으니 말이다. WinFX라는 단어를 처음 들었을 때는, 확실히 그 이름에서 Win32의 후계자라는 느낌이 강했으니 무리는 아니다. 결국, WinFX는 Win32의 후계자가 아니라 .NET Framework에서 돌아가는 녀석이라는 것을 알았을 때 그 아쉬움이란.. 그동안 윈도우에서 뭔가 UI 작업을 하려면 귀찮음의 연속이었다. 사실 경험있는 개발자라면, C#으로 .NET Framework에서 Windows Form 이벤트 핸들러를 추가하나 .. 더보기
WTL, Windows Template Library MFC는 강력한 클래스 라이브러리이다. Win32 API로 Windows 프로그래밍을 하는 것은, Windows 프로그래밍을 배울 때가 아니라면 이 방법으로 실제로 일하는 것은 엄청난 시간이 걸리는 일이고, 그럼에도 불구하고 원하는 기능을 제대로 구현할 수 있을지 여부도 장담할 수 없다. 왜냐하면, MSDN에서 API에 대한 설명이 잘 되어 있다고 하더라도, 그 API를 처음부터 조합해서 원하는 기능을 만들어내는 것은 쉬운 일이 아니기 때문이다. API만 사용해서 ActiveX 컨트롤을 만든다고 생각해보라. 끔찍하지 않은가? MFC는 사실 잘 구성되어 있는 클래스 라이브러리가 아니다. API를 래핑하는 구조에서 크게 벗어나지 못하고 있고, CObject에서 파생되어 나가는 구조라 가장 자주 쓰이는 CWn.. 더보기
MFC와 Windows Form Windows Form 프로그래밍을 처음 접하면, MFC에서의 지저분한 구조를 한번에 대체할 수 있을 것만 같은 느낌이 들지만, 실제로는 그렇지 않다. MFC 구조는 깔끔하지 못하다. 대표적으로, MFC는 윈도우로 가는 메세지를 모두 잡아내기 위해서 2개의 훅을 설치하는데, 그 중 하나는 WH_CBT라는, 이름부터 마음에 들지 않는 훅이다. CBT는 Computer Based Training의 약자인데, 이 훅의 목적은 윈도우의 작동 방식을 배우라는건가? 여튼, 이 훅을 설치해야 윈도우의 시스템 메시지까지 잡아낼 수 있다. 만들어진지 꽤나 오래되는 클래스 라이브러리이고, 구조로 봤을 때도 그렇게 깔끔한 라이브러리가 아니라서 항상 이런 저런 불만은 많았지만, 직접 클래스 라이브러리를 만들어보려고 하면 MF.. 더보기
GDI, GDI+, WPF 고전적인 윈도우 프로그래밍은 곧 이벤트 핸들러를 작성하는 것이었고, WinMain()과 WndProc()를 작성하는 것이다. 사실, 이 방법론은 여러번 변경되어왔다. SDK를 사용한 Win32 API를 직접 사용하는 방법에서 MFC를 사용한 C++ 클래스 라이브러리를 사용하는 방법으로, 최근에는 Windows Forms을 사용하는 것으로 변경되어 왔는데, 숱하게 많은 방법론이 등장했음에도 불구하고 상대적으로 느린 변화를 보였던 것이 바로 윈도우 프리젠테이션 엔진이었다. 윈도우 프리젠테이션 엔진은 전통적으로 GDI라는 2D 클리핑 기반 엔진인데, 사실 MFC 시절까지도 이것은 큰 변화가 없었다. 이것이 .NET이 등장하면서 GDI+라는 것으로 재작성되어 나타났다. 그러나 근본적인 면에서 GDI+ 역시 2D.. 더보기