2012-04-11 3 views
2

ATL::CWindowImpl<CMyCustomControl>에서 사용자 지정 컨트롤을 파생했으며 DECLARE_WND_CLASS(_T("CMyCustomControl"))이라고 선언했습니다.ATL/WTL 대화 상자에 사용자 정의 컨트롤을 등록하는 방법은 무엇입니까?

나는 또한 클래스 이름이 CMyCustomControl 인 사용자 지정 컨트롤이있는 대화 상자 리소스를 만들었습니다.

대화 상자에 컨트롤을 표시 할 수 있도록 컨트롤을 올바르게 등록하는 방법은 무엇입니까?

+1

당신이 찾고있는 것을이 질문에서 찾을 수도 있습니다 : http://stackoverflow.com/questions/575532/pre-registering-an-atl-window-class 분명히 불가능합니다. –

+0

@ MarkRansom : Shooooot ... 이것은 정말로 "사전 등록"되는가요? 나는 정말로 * 등록 할 때 (제 3 자 파티는 진행되지 않는다.), 나는 단지 그것을 보여주기를 원한다. ... 커스텀 컨트롤을위한 꽤 표준적인 사운드처럼 들린다. – Mehrdad

+0

만약 당신이 리소스를 원한다면 대화 상자가 생성 될 때 컨트롤을 자동으로 만들려면 Windows가 미리 창 클래스에 대해 알고 있어야합니다. 더미 컨트롤을 만들고 OnInitDialog에서 서브 클래 싱하는 전술은 꽤 잘 작동합니다. –

답변

2

WTL에서 사용자 지정 컨트롤을 만드는 일반적인 방법이 있습니다.

  1. DECLARE_WND_CLASS/DECLARE_WND_SUPERCLASS + RegisterClassEx API는 ESP, 창 클래스를 구현 클래스 이름
  2. 를 통해 컨트롤을 인스턴스화하는 대화 상자 템플릿에서 이름 + 사용자 지정 컨트롤 참조 클래스를 등록합니다. CWindowImpl을 상속하고 수동으로 제어를 생성합니다 (특히 esp. OnCreate/OnInitDialog
  3. 하는 창 클래스를 구현에서,

(하이퍼 링크, 사용자 지정 목록보기 등 색상 강조와 편집 컨트롤 예를 들어 정적) 대화 상자 템플릿을 통해 표준 컨트롤을 인스턴스화, 그 동작을 변경하기 위해 컨트롤 인스턴스를 서브 클래스 세 가지 모두를 사용하면 클래스 정의에서 매크로 이상을 수행해야합니다. 훌륭한 예가 여기에 있습니다 : http://www.viksoe.dk/code/all_wtl.htm "컨트롤"섹션.

확실히 네 번째 방법은 ActiveX 컨트롤을 구현하는 것입니다.

+0

viksoe.dk를 잊어 버렸습니다. +1 - 참조 주셔서 감사합니다. – bvj

관련 문제