codeheart 위치로그  |  태그  |  미디어로그  |  방명록
icon MFC 에 해당하는 글2 개
2010.07.25   자체 MFC 유사 Framework 구축시 HWND 를 CWnd* 로 매칭하기 위한 좋은 방법
2009.07.04   ATL/WTL


icon 자체 MFC 유사 Framework 구축시 HWND 를 CWnd* 로 매칭하기 위한 좋은 방법
개발/VC++ | 2010. 7. 25. 14:16

방법은 물론 많다.
자체 Singleton PropertyMap 을 구축하여 HWND -> CWnd* 로 매핑해도 되고, 사실 이 방법을 써왔다.
또한, MFC 역시 쓰레드 영역마다 이런 맵을 구축하는 것으로 알고 있다.
WINAPI 는 기본적으로 GWLP_USERDATA 라는 것을 hwnd 에 대응하여 소유할 수 있는데, 이를 그런 포인터로 가지는 것도
괜찮은 방법인 것 같다. 여기서는 hwnd 에 App 을 연동했는데 해당 Wnd 클래스에 연동하는게 나을 듯 싶다.
HINSTANCE 에는 USERDATA 넣을 방법이 있는지?

[생성시 연동]
        DemoApp *pDemoApp = (DemoApp *)pcs->lpCreateParams;

        ::SetWindowLongPtrW(
            hwnd,
            GWLP_USERDATA,
            PtrToUlong(pDemoApp)
            );

[참고시 연동]
        DemoApp *pDemoApp = reinterpret_cast<DemoApp *>(static_cast<LONG_PTR>(
            ::GetWindowLongPtrW(
                hwnd,
                GWLP_USERDATA
                )));



arrow 트랙백 | 댓글



icon ATL/WTL
개발/VC++ (윈도우) | 2009. 7. 4. 06:08

WTL 은 Windows Template Library 로,
STL 과 같이 Template 형식의 순수 .h 파일 라이브러리다.
다만 그 목적은 윈도우 어플리케이션 프레임워크인 MFC 와 유사하다.
ATL 과 WTL 사이의 역사는 잘 모르겠지만, 아마도 ATL 이 먼저인 것 같다.
애초에 MFC 개발자들이 구조적으로 MFC 를 일반화하기 위해 내부 코어를 템플릿화시키지 않았을까?
그래서 ATL 이 탄생했고, 과거의 MFC 와 달리 현재의 MFC 는 하위 층에 ATL 을 사용하고 있다.
또한 ATL 을 확장하여 WTL 이 탄생하였는데 ATL 은 MFC 의 베이스를 구성하고 있지만
독립적으로 윈도우 프로그램을 작성할 수는 없다.
(보다 정확히 말하자면 간단한 프로그램을 만들 수 있으나, 고급 수준의 기능을 사용하기에는 다소 부족하다.)
따라서, ATL 의 특성을 바탕으로 MFC 을 대체할 만한 라이브러리인 WTL 가 탄생된 것 같다.

분명히 WTL 은 MFC 에 비해 여러모로 우수하지만, 몇가지 단점으로 인해 MS 가 버린 듯 하다.
버렸다는 얘기는 오픈소스화했다는 것이고, 지금 오픈소스로 명맥이 유지되고 있다.
즉, MS 의 직접적인 지원(개발툴에 포함되는 등의)은 없다.

MFC 에 비해 WTL 이 가지는 장점은, 일단 외부 DLL 이 필요없다.
단순히 API 를 템플릿 차원으로 랩핑했기 때문에 부가적인 오버헤드가 발생하지 않는다.
그리고, 최소한의 가상 메쏘드를 사용하였고 가능한 많은 부분을 제네릭하게 작성하였다.
이러한 점은 많은 이점을 낳는다. 코드의 독립성이 뛰어나게 되며, 재사용성이 증대된다.
또한, 생성되는 실행파일 용량이 훨씬 작고, 성능도 더 우수하다.
게다가 MFC 보다 후에 등장해서 그런지 구조적으로 조금 낫다.
따라서, WTL 은 MFC 에 비해서는 타이핑량이 줄고, 간단한 소스를 만든다.
API 를 아주 추상적으로 랩핑하지 않았음에도 IDE 의존도가 높은 MFC 에 비해서 어느 정도 코드 생산성이 있어 보인다.
(구조적으로 조금 낫다는 것은 WTL 역시 MFC 의 베이스를 깔고 있는 ATL 를 확장한 것이라, 많은 부분 호환적인 소스가 보인다. 만일 이런 부분을 버렸다면, WTL 은 구조적으로 더 발전될 수도 있었을 것 같다.)

그렇지만, WTL 은 MFC 보다 C++ 에 대한 더 높은 이해를 필요로 한다.
그리고 제네릭, 가상함수 등의 지식도 어느 정도 있어야 한다.
사실 MFC 나 ATL/WTL 이나 C++ 을 온전히 모르고 쓸 수 있도록 배려한(?) MS 개발자들의 트릭들이 존재하기
때문에 모든 문법 사항을 필수적으로 알아야 하는 것은 아니다.
그렇지만, 확실히 WTL 코드는 C++ 입문자들이 접하기에는 다소 어려울 듯 싶다.
이 점이 MS 가 WTL 을 포기한 이유인 듯 싶다. (내부적으로 유사한 ATL만을 공유하는듯)

하지만 WTL 에도 어느 정도의 꼼수와 트릭이 제공되는 듯하다.




arrow 트랙백 | 댓글



[PREV] [1] [NEXT]
관리자  |   글쓰기
BLOG main image
code heart story
분류 전체보기 (74)
생활 (0)
잡담 (8)
컴퓨터 (11)
개발 (52)
Total :
Today :
Yesterday :
rss
위치로그 : 태그 : 방명록 : 관리자
코드하트's Blog is powered by Daum / Designed by plyfly.net