CContainedWindowT 클래스
이 클래스는 다른 개체 내에 포함된 창을 구현합니다.
Important
이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다.
구문
template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase
매개 변수
TBase
새 클래스의 기본 클래스입니다. 기본 기본 클래스는 .입니다 CWindow
.
TWinTraits
창의 스타일을 정의하는 특성 클래스입니다. 기본값은 CControlWinTraits
입니다.
참고 항목
CContainedWindow 는 CContainedWindowT
. 기본 클래스 또는 특성을 변경하려면 직접 사용합니다 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_lpszClassName 및 m_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)
클래스 개요