포함된 창 사용
ATL은 CContainedWindowT를 사용하여 포함된 창을 구현합니다. 포함된 창은 메시지를 자체 클래스에서 처리하는 대신 컨테이너 개체에 위임하는 창을 나타냅니다.
참고 항목
포함된 창을 사용하기 위해 클래스 CContainedWindowT
를 파생시킬 필요가 없습니다.
포함된 창을 사용하면 기존 Windows 클래스를 슈퍼 클래스로 만들거나 기존 창을 서브클래싱할 수 있습니다. 기존 Windows 클래스를 슈퍼 클래스하는 창을 만들려면 먼저 개체의 생성자 CContainedWindowT
에서 기존 클래스 이름을 지정합니다. 그런 다음 CContainedWindowT::Create
을(를) 호출합니다. 기존 창을 서브클래싱하려면 Windows 클래스 이름을 지정할 필요가 없습니다(생성자에 NULL 전달). 서브클래스되는 창에 대한 핸들을 사용하여 메서드를 호출 CContainedWindowT::SubclassWindow
하기만 하면 됩니다.
일반적으로 컨테이너 클래스의 데이터 멤버로 포함된 창을 사용합니다. 컨테이너는 창일 필요가 없습니다. 그러나 CMessageMap에서 파생되어야 합니다.
포함된 창은 대체 메시지 맵을 사용하여 메시지를 처리할 수 있습니다. 포함된 창이 두 개 이상 있는 경우 각각 별도의 포함된 창에 해당하는 여러 대체 메시지 맵을 선언해야 합니다.
예시
다음은 두 개의 포함된 창이 있는 컨테이너 클래스의 예입니다.
class CMyContainer : public CMessageMap
{
public:
CContainedWindow m_wndEdit;
CContainedWindow m_wndList;
CMyContainer() : m_wndEdit(_T("Edit"), this, 1),
m_wndList(_T("List"), this, 2)
{
}
BEGIN_MSG_MAP(CMyContainer)
ALT_MSG_MAP(1)
// handlers for the Edit window go here
ALT_MSG_MAP(2)
// handlers for the List window go here
END_MSG_MAP()
};
포함된 창에 대한 자세한 내용은 SUBEDIT 샘플을 참조하세요.