다음을 통해 공유


CContainedWindowT 클래스

이 클래스는 다른 개체 내에 포함된 창을 구현합니다.

Important

이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다.

구문

template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

매개 변수

TBase
새 클래스의 기본 클래스입니다. 기본 기본 클래스는 .입니다 CWindow.

TWinTraits
창의 스타일을 정의하는 특성 클래스입니다. 기본값은 CControlWinTraits입니다.

참고 항목

CContainedWindowCContainedWindowT. 기본 클래스 또는 특성을 변경하려면 직접 사용합니다 CContainedWindowT .

멤버

공용 생성자

속성 설명
CContainedWindowT::CContainedWindowT 생성자입니다. 데이터 멤버를 초기화하여 포함된 창의 메시지를 처리할 메시지 맵을 지정합니다.

공용 메서드

이름 설명
CContainedWindowT::Create 창을 만듭니다.
CContainedWindowT::DefWindowProc 기본 메시지 처리를 제공합니다.
CContainedWindowT::GetCurrentMessage 현재 메시지를 반환합니다.
CContainedWindowT::RegisterWndSuperclass 포함된 창의 창 클래스를 등록합니다.
CContainedWindowT::SubclassWindow 창을 서브클래싱합니다.
CContainedWindowT::SwitchMessageMap 포함된 창의 메시지를 처리하는 데 사용되는 메시지 맵을 변경합니다.
CContainedWindowT::UnsubclassWindow 이전에 서브클래싱된 창을 복원합니다.
CContainedWindowT::WindowProc (정적) 포함된 창으로 전송된 메시지를 처리합니다.

공용 데이터 멤버

속성 설명
CContainedWindowT::m_dwMsgMapID 포함된 창의 메시지를 처리할 메시지 맵을 식별합니다.
CContainedWindowT::m_lpszClassName 새 창 클래스의 기반이 되는 기존 창 클래스의 이름을 지정합니다.
CContainedWindowT::m_pfnSuperWindowProc 창 클래스의 원본 창 프로시저를 가리킵니다.
CContainedWindowT::m_pObject 포함하는 개체를 가리킵니다.

설명

CContainedWindowT 는 다른 개체 내에 포함된 창을 구현합니다. CContainedWindowT'의 창 프로시저는 포함된 개체의 메시지 맵을 사용하여 메시지를 적절한 처리기로 전달합니다. 개체를 CContainedWindowT 생성할 때 사용해야 하는 메시지 맵을 지정합니다.

CContainedWindowT 를 사용하면 기존 창 클래스를 슈퍼클래싱하여 새 창을 만들 수 있습니다. 메서드는 Create 먼저 기존 클래스를 기반으로 하지만 사용 하는 창 클래스를 등록 합니다 CContainedWindowT::WindowProc. Create 그런 다음 이 새 창 클래스를 기반으로 창을 만듭니다. 각 인스턴스는 CContainedWindowT 다른 창 클래스를 슈퍼 클래스할 수 있습니다.

CContainedWindowT은 또한 창 서브클래싱도 지원합니다. SubclassWindow 메서드는 기존 창을 CContainedWindowT 개체에 연결하고 창 프로시저를 CContainedWindowT::WindowProc로 변경합니다. CContainedWindowT의 각 인스턴스는 다른 창을 서브클래싱할 수 있습니다.

참고 항목

지정된 CContainedWindowT 개체에 대해 또는 Create .를 호출합니다 SubclassWindow. 동일한 개체에서 두 메서드를 모두 호출하면 안 됩니다.

ATL 프로젝트 마법사의 옵션에 따라 컨트롤 추가를 사용하는 경우 마법사는 컨트롤을 CContainedWindowT 구현하는 클래스에 데이터 멤버를 자동으로 추가합니다. 다음 예제에서는 포함된 창이 선언되는 방법을 보여줍니다.

public:
   // Declare a contained window data member
   CContainedWindow m_ctlEdit;

   // Initialize the contained window:
   // 1. Pass "Edit" to specify that the contained 
   //    window should be based on the standard 
   //    Windows Edit box
   // 2. Pass 'this' pointer to specify that CAtlEdit 
   //    contains the message map to be used for the 
   //    contained window's message processing
   // 3. Pass the identifier of the message map. '1'
   //    identifies the alternate message map declared
   //    with ALT_MSG_MAP(1)
   CAtlEdit()
      : m_ctlEdit(_T("Edit"), this, 1)
   {
      m_bWindowOnly = TRUE;
   }

 

// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
   CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()

 

// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
   BOOL& /*bHandled*/)
{
   RECT rc;
   GetWindowRect(&rc);
   rc.right -= rc.left;
   rc.bottom -= rc.top;
   rc.top = rc.left = 0;
   m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE | 
      ES_MULTILINE | ES_AUTOVSCROLL);
   return 0;
}
에 대한 자세한 내용은 참조
컨트롤 만들기 ATL 자습서
ATL에서 창 사용하기 ATL 창 클래스
ATL 프로젝트 마법사 ATL 프로젝트 만들기
Windows Windows SDK의 Windows 및 후속 항목

상속 계층 구조

TBase

CContainedWindowT

요구 사항

헤더: atlwin.h

CContainedWindowT::CContainedWindowT

생성자는 데이터 멤버를 초기화합니다.

CContainedWindowT(
    LPTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

CContainedWindowT(
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0)
    CContainedWindowT();

매개 변수

lpszClassName
[in] 포함된 창의 기반이 되는 기존 창 클래스의 이름입니다.

pObject
[in] 메시지 맵을 선언하는 포함하는 개체에 대한 포인터입니다. 이 개체의 클래스는 CMessageMap에서 파생되어야 합니다.

dwMsgMapID
[in] 포함된 창의 메시지를 처리할 메시지 맵을 식별합니다. 기본값 0은 BEGIN_MSG_MAP 선언된 기본 메시지 맵을 지정합니다. ALT_MSG_MAP(msgMapID)선언된 대체 메시지 맵을 사용하려면 전달msgMapID합니다.

설명

만들기를 통해 새 창을 만들려면 lpszClassName 매개 변수에 대한 기존 창 클래스의 이름을 전달해야 합니다. 예를 들어 CContainedWindow 개요를 참조하세요.

세 가지 생성자가 있습니다.

  • 세 개의 인수가 있는 생성자는 일반적으로 호출됩니다.

  • 두 인수가 있는 생성자는 .에서 TBase::GetWndClassName클래스 이름을 사용합니다.

  • 인수가 없는 생성자는 나중에 인수를 제공하려는 경우에 사용됩니다. 나중에 호출 Create할 때 창 클래스 이름, 메시지 맵 개체 및 메시지 맵 ID를 제공해야 합니다.

SubclassWindow를 통해 기존 창을 서브클래싱하는 경우 lpszClassName 값이 사용되지 않으므로 이 매개 변수에 대해 NULL을 전달할 수 있습니다.

CContainedWindowT::Create

RegisterWndSuperclass를 호출하여 기존 클래스를 기반으로 하지만 CContainedWindowT::WindowProc을 사용하는 창 클래스를 등록합니다.

HWND Create(
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

HWND Create(
    CMessageMap* pObject,
    DWORD dwMsgMapID,
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

HWND Create(
    LPCTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID,
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

매개 변수

lpszClassName
[in] 포함된 창의 기반이 되는 기존 창 클래스의 이름입니다.

pObject
[in] 메시지 맵을 선언하는 포함하는 개체에 대한 포인터입니다. 이 개체의 클래스는 CMessageMap에서 파생되어야 합니다.

dwMsgMapID
[in] 포함된 창의 메시지를 처리할 메시지 맵을 식별합니다. 기본값 0은 BEGIN_MSG_MAP 선언된 기본 메시지 맵을 지정합니다. ALT_MSG_MAP(msgMapID)선언된 대체 메시지 맵을 사용하려면 전달msgMapID합니다.

hWndParent
[in] 부모 또는 소유자 창에 대한 핸들입니다.

rect
[in] 창의 위치를 지정하는 RECT 구조체입니다. 포인터 RECT 또는 참조로 전달할 수 있습니다.

szWindowName
[in] 창의 이름을 지정합니다. 기본값은 NULL입니다.

dwStyle
[in] 창의 스타일입니다. 기본값은 WS_CHILD | WS_VISIBLE입니다. 가능한 값 목록은 Windows SDK의 CreateWindow를 참조하세요.

dwExStyle
[in] 확장 창 스타일입니다. 기본값은 0입니다. 즉, 확장된 스타일이 없습니다. 가능한 값 목록은 Windows SDK의 CreateWindowEx를 참조하세요.

MenuOrID
[in] 자식 창의 경우 창 식별자입니다. 최상위 창의 경우 창에 대한 메뉴 핸들입니다. 기본값은 0U입니다.

lpCreateParam
[in] 창 만들기 데이터에 대한 포인터입니다. 전체 설명은 CreateWindowEx에 대한 최종 매개 변수에 대한 설명을 참조하세요.

Return Value

성공하면 새로 만든 창에 대한 핸들입니다. 그렇지 않으면 NULL입니다.

설명

기존 창 클래스 이름은 m_lpszClassName 저장됩니다. Create 그런 다음 이 새 클래스를 기반으로 창을 만듭니다. 새로 만든 창이 개체에 CContainedWindowT 자동으로 연결됩니다.

참고 항목

이미 SubclassWindow를 호출한 경우에는 Create를 호출하지 마세요.

참고 항목

0이 MenuOrID 매개 변수의 값으로 사용되는 경우 컴파일러 오류를 방지하려면 0U(기본값)로 지정해야 합니다.

CContainedWindowT::DefWindowProc

메시지 맵에서 처리되지 않는 메시지를 처리하기 위해 WindowProc 에서 호출됩니다.

LRESULT DefWindowProc()
LRESULT DefWindowProc(
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

매개 변수

uMsg
[in] 창에 보낸 메시지입니다.

wParam
[in] 추가 메시지 관련 정보입니다.

lParam
[in] 추가 메시지 관련 정보입니다.

Return Value

메시지 처리의 결과입니다.

설명

기본적으로 DefWindowProc CallWindowProc Win32 함수를 호출하여 메시지 정보를 m_pfnSuperWindowProc 지정된 창 프로시저로 보냅니다.

CContainedWindowT::GetCurrentMessage

현재 메시지(m_pCurrentMsg)를 반환합니다.

const _ATL_MSG* GetCurrentMessage();

Return Value

구조에 MSG 패키지된 현재 메시지입니다.

CContainedWindowT::m_dwMsgMapID

포함된 창에 현재 사용 중인 메시지 맵의 식별자를 보유합니다.

DWORD m_dwMsgMapID;

설명

이 메시지 맵은 포함하는 개체에서 선언해야 합니다.

BEGIN_MSG_MAP 사용하여 선언된 기본 메시지 맵은 항상 0으로 식별됩니다. ALT_MSG_MAP(msgMapID)선언된 대체 메시지 맵은 msgMapID.

m_dwMsgMapID는 먼저 생성자에 의해 초기화되며 SwitchMessageMap을 호출하여 변경할 수 있습니다. 예를 들어 CContainedWindowT 개요를 참조 하세요.

CContainedWindowT::m_lpszClassName

기존 창 클래스의 이름을 지정합니다.

LPTSTR m_lpszClassName;

설명

창을 만들 때 Create는 이 기존 클래스를 기반으로 하지만 CContainedWindowT::WindowProc를 사용하는 새 창 클래스를 등록합니다.

m_lpszClassName 는 생성자에 의해 초기화됩니다. 예를 들어 CContainedWindowT 개요를 참조하세요.

CContainedWindowT::m_pfnSuperWindowProc

포함된 창이 서브클래스된 m_pfnSuperWindowProc 경우 창 클래스의 원래 창 프로시저를 가리킵니다.

WNDPROC m_pfnSuperWindowProc;

설명

포함된 창이 상위 클래스인 경우 기존 클래스를 수정하는 창 클래스를 기반으로 하며 기존 창 클래스 m_pfnSuperWindowProc 의 창 프로시저를 가리킵니다.

DefWindowProc 메서드는 메시지 정보를 저장한 창 프로시저로 보냅니다m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

개체를 포함하는 개체를 가리킵니다 CContainedWindowT .

CMessageMap* m_pObject;

설명

클래스가 CMessageMap에서 파생되어야 하는 이 컨테이너는 포함된 창에서 사용하는 메시지 맵을 선언합니다.

m_pObject 는 생성자에 의해 초기화됩니다. 예를 들어 CContainedWindowT 개요를 참조하세요.

CContainedWindowT::RegisterWndSuperclass

Create에서 호출하여 포함된 창의 창 클래스를 등록합니다.

ATOM RegisterWndSuperClass();

Return Value

성공하면 등록 중인 창 클래스를 고유하게 식별하는 원자입니다. 그렇지 않으면 0입니다.

설명

이 창 클래스는 기존 클래스를 기반으로 하지만 CContainedWindowT::WindowProc를 사용합니다. 기존 창 클래스의 이름과 창 프로시저는 각각 m_lpszClassNamem_pfnSuperWindowProc 저장됩니다.

CContainedWindowT::SubclassWindow

hWnd로 식별된 창을 서브클래싱하고 개체에 CContainedWindowT 연결합니다.

BOOL SubclassWindow(HWND hWnd);

매개 변수

hWnd
[in] 서브클래스되는 창에 대한 핸들입니다.

Return Value

창이 성공적으로 서브클래스된 경우 TRUE입니다. 그렇지 않으면 FALSE입니다.

설명

이제 서브클래스된 창에서 CContainedWindowT::WindowProc을 사용합니다. 원래 창 프로시저는 m_pfnSuperWindowProc 저장됩니다.

참고 항목

이미 Create를 호출한 경우에는 SubclassWindow를 호출하지 마세요.

CContainedWindowT::SwitchMessageMap

포함된 창의 메시지를 처리하는 데 사용할 메시지 맵을 변경합니다.

void SwitchMessageMap(DWORD dwMsgMapID);

매개 변수

dwMsgMapID
[in] 메시지 맵 식별자입니다. BEGIN_MSG_MAP 선언된 기본 메시지 맵을 사용하려면 0을 전달합니다. ALT_MSG_MAP(msgMapID)선언된 대체 메시지 맵을 사용하려면 전달msgMapID합니다.

설명

메시지 맵은 포함하는 개체에 정의되어야 합니다.

처음에는 생성자에서 메시지 맵 식별자를 지정합니다.

CContainedWindowT::UnsubclassWindow

개체에서 CContainedWindowT 서브클래스된 창을 분리하고 m_pfnSuperWindowProc 저장된 원래 창 프로시저를 복원합니다.

HWND UnsubclassWindow(BOOL bForce = FALSE);

매개 변수

bForce
[in] 이 CContainedWindowT 개체의 창 프로시저가 현재 활성화되지 않은 경우에도 원래 창 프로시저를 강제로 복원하려면 TRUE로 설정합니다. bForce가 FALSE로 설정되어 있고 이 CContainedWindowT 개체의 창 프로시저가 현재 활성화되어 있지 않으면 원래 창 프로시저가 복원되지 않습니다.

Return Value

이전에 서브클래스된 창에 대한 핸들입니다. bForce가 FALSE로 설정되어 있고 이 CContainedWindowT 개체의 창 프로시저가 현재 활성화되어 있지 않으면 NULL을 반환합니다.

설명

창이 제거되기 전에 원래 창 프로시저를 복원하려는 경우에만 이 메서드를 사용합니다. 그렇지 않으면 창이 제거되면 WindowProc 에서 자동으로 이 작업을 수행합니다.

CContainedWindowT::WindowProc

이 정적 메서드는 창 프로시저를 구현합니다.

static LRESULT CALLBACK WindowProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

매개 변수

hWnd
[in] 창에 대한 핸들입니다.

uMsg
[in] 창에 보낸 메시지입니다.

wParam
[in] 추가 메시지 관련 정보입니다.

lParam
[in] 추가 메시지 관련 정보입니다.

Return Value

메시지 처리의 결과입니다.

설명

WindowProc는 메시지를 m_dwMsgMapID 식별된 메시지 맵으로 전달합니다. 필요한 WindowProc 경우 추가 메시지 처리를 위해 DefWindowProc를 호출합니다.

참고 항목

CWindow 클래스
CWindowImpl 클래스
CMessageMap 클래스
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
클래스 개요