다음을 통해 공유


CComCompositeControl 클래스

이 클래스는 복합 컨트롤을 구현하는 데 필요한 메서드를 제공합니다.

Important

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

구문

template <class T>
class CComCompositeControl : public CComControl<T,CAxDialogImpl<T>>

매개 변수

T
CComObjectRoot 또는 CComObjectRootEx에서 파생된 클래스와 복합 컨트롤을 지원하려는 다른 인터페이스에서 파생됩니다.

멤버

공용 생성자

속성 설명
CComCompositeControl::CComCompositeControl 생성자입니다.
CComCompositeControl::~CComCompositeControl 소멸자입니다.

공용 메서드

이름 설명
CComCompositeControl::AdviseSinkMap 복합 컨트롤에서 호스트하는 모든 컨트롤을 조언하거나 취소하려면 이 메서드를 호출합니다.
CComCompositeControl::CalcExtent 복합 컨트롤을 호스트하는 데 사용되는 대화 상자 리소스의 HIMETRIC 단위로 크기를 계산하려면 이 메서드를 호출합니다.
CComCompositeControl::Create 이 메서드는 복합 컨트롤에 대 한 컨트롤 창을 만들기 위해 호출 됩니다.
CComCompositeControl::CreateControlWindow 이 메서드를 호출하여 컨트롤 창을 만들고 호스트된 컨트롤을 조언합니다.
CComCompositeControl::SetBackgroundColorFromAmbient 컨테이너의 배경색을 사용하여 복합 컨트롤의 배경색을 설정하려면 이 메서드를 호출합니다.

공용 데이터 멤버

이름 설명
CComCompositeControl::m_hbrBackground 배경 브러시입니다.
CComCompositeControl::m_hWndFocus 현재 포커스가 있는 창의 핸들입니다.

설명

클래스에서 파생된 클래스 CComCompositeControl 는 ActiveX 복합 컨트롤의 기능을 상속합니다. ActiveX 컨트롤에서 파생된 컨트롤은 표준 대화 상자에서 CComCompositeControl 호스트됩니다. 이러한 유형의 컨트롤은 다른 컨트롤(네이티브 Windows 컨트롤 및 ActiveX 컨트롤)을 호스트할 수 있기 때문에 복합 컨트롤이라고 합니다.

CComCompositeControl 는 자식 클래스에서 열거된 데이터 멤버를 찾아 복합 컨트롤을 만드는 데 사용할 대화 상자 리소스를 식별합니다. 이 자식 클래스의 멤버 IDD는 컨트롤의 창으로 사용할 대화 상자 리소스의 리소스 ID로 설정됩니다. 다음은 컨트롤 창에 사용할 대화 상자 리소스를 식별하기 위해 파생된 CComCompositeControl 클래스가 포함해야 하는 데이터 멤버의 예입니다.

enum { IDD = IDD_MYCOMPOSITE };

참고 항목

복합 컨트롤은 창 없는 컨트롤을 포함할 수 있지만 항상 창이 있는 컨트롤입니다.

파생 클래스에 CComCompositeControl의해 구현되는 컨트롤에는 기본 탭 동작이 기본 제공되어 있습니다. 컨트롤이 포함된 애플리케이션에서 탭으로 포커스를 받으면 TAB 키를 연속적으로 누르면 포커스가 복합 컨트롤의 포함된 모든 컨트롤을 순환한 다음 복합 컨트롤에서 컨테이너의 탭 순서로 다음 항목으로 이동합니다. 호스트된 컨트롤의 탭 순서는 대화 상자 리소스에 의해 결정되며 탭이 발생할 순서를 결정합니다.

참고 항목

액셀러레이터가 제대로 CComCompositeControl작동하려면 컨트롤이 만들어질 때 가속기 테이블을 로드하고, 핸들 및 가속기 수를 IOleControlImpl::GetControlInfo다시 전달하고, 컨트롤이 해제될 때 테이블을 삭제해야 합니다.

예시

// Example for overriding IOleControlImpl::GetControlInfo()
// This example uses the accelerator table from the project resources
// with the identifier IDR_ACCELTABLE
// Define GetControlInfo() in the header of your composite 
// control class as follows:

STDMETHOD(GetControlInfo)(CONTROLINFO* pCI)
{
    // Load the accelerator table from the resource
    pCI->hAccel = LoadAccelerators(_AtlBaseModule.GetResourceInstance(), 
       MAKEINTRESOURCE(IDR_ACCELTABLE));

    if (pCI->hAccel == NULL)
        return E_FAIL;

    // Get the number of accelerators in the table
    pCI->cAccel = (USHORT)CopyAcceleratorTable(pCI->hAccel, NULL, 0);
    // The following is optional if you want your control
    // to process the return and/or escape keys
    // pCI.dwFlags = CTRLINFO_EATS_RETURN | CTRLINFO_EATS_ESCAPE;
    pCI->dwFlags = 0;

    return S_OK;
}

상속 계층 구조

WinBase

CComControlBase

CComControl

CComCompositeControl

요구 사항

헤더: atlctl.h

CComCompositeControl::AdviseSinkMap

복합 컨트롤에서 호스트하는 모든 컨트롤을 조언하거나 취소하려면 이 메서드를 호출합니다.

HRESULT AdviseSinkMap(bool bAdvise);

매개 변수

bAdvise
모든 컨트롤이 권장되는 경우 True입니다. 그렇지 않으면 false입니다.

Return Value

설명
S_OK 이벤트 싱크 맵의 모든 컨트롤이 이벤트 원본에서 연결되거나 연결이 끊어졌습니다.
E_FAIL 이벤트 싱크 맵의 모든 컨트롤이 이벤트 원본에서 연결되거나 연결이 끊어질 수 있는 것은 아닙니다.
E_POINTER 이 오류는 일반적으로 컨트롤의 이벤트 싱크 맵에 있는 항목에 문제가 있거나 기본 클래스에서 IDispEventSimpleImpl 사용되는 IDispEventImpl 템플릿 인수에 문제가 있음을 나타냅니다.
CONNECT_E_ADVISELIMIT 연결 지점이 이미 연결 제한에 도달했으며 더 이상 수락할 수 없습니다.
CONNECT_E_CANNOTCONNECT 싱크는 이 연결 지점에 필요한 인터페이스를 지원하지 않습니다.
CONNECT_E_NOCONNECTION 쿠키 값이 유효한 연결을 나타내지 않습니다. 이 오류는 일반적으로 컨트롤의 이벤트 싱크 맵에 있는 항목에 문제가 있거나 기본 클래스에서 IDispEventSimpleImpl 사용되는 IDispEventImpl 템플릿 인수에 문제가 있음을 나타냅니다.

설명

이 메서드의 기본 구현은 이벤트 싱크 맵의 항목을 검색합니다. 그런 다음, 이벤트 싱크 맵의 싱크 항목에서 설명하는 COM 개체에 대한 연결 지점을 조언하거나 취소합니다. 또한 이 멤버 메서드는 싱크 맵의 모든 컨트롤에 대해 파생 클래스가 하나의 인스턴스 IDispEventImpl 에서 상속된다는 사실에 의존합니다.

CComCompositeControl::CalcExtent

복합 컨트롤을 호스트하는 데 사용되는 대화 상자 리소스의 HIMETRIC 단위로 크기를 계산하려면 이 메서드를 호출합니다.

BOOL CalcExtent(SIZE& size);

매개 변수

size
이 메서드로 SIZE 채울 구조체에 대한 참조입니다.

Return Value

컨트롤이 대화 상자에서 호스트되는 경우 TRUE입니다. 그렇지 않으면 FALSE입니다.

설명

크기 매개 변수에 크기반환됩니다.

CComCompositeControl::Create

이 메서드는 복합 컨트롤에 대 한 컨트롤 창을 만들기 위해 호출 됩니다.

HWND Create(
    HWND hWndParent,
    RECT& /* rcPos */,
    LPARAM dwInitParam = NULL);

매개 변수

hWndParent
컨트롤의 부모 창에 대한 핸들입니다.

rcPos
예약되었습니다.

dwInitParam
컨트롤을 만드는 동안 컨트롤에 전달할 데이터입니다. dwInitParam으로 전달된 데이터는 생성될 때 복합 컨트롤로 전송되는 WM_INITDIALOG 메시지의 LPARAM 매개 변수로 표시됩니다.

Return Value

새로 만든 복합 컨트롤 대화 상자에 대한 핸들입니다.

설명

이 메서드는 일반적으로 컨트롤의 현재 위치 활성화 하는 동안 호출 됩니다.

CComCompositeControl::CComCompositeControl

생성자입니다.

CComCompositeControl();

설명

CComCompositeControl::m_hbrBackground 및 CComCompositeControl::m_hWndFocus 데이터 멤버를 NULL로 초기화합니다.

CComCompositeControl::~CComCompositeControl

소멸자입니다.

~CComCompositeControl();

설명

있는 경우 백그라운드 개체를 삭제합니다.

CComCompositeControl::CreateControlWindow

이 메서드를 호출하여 컨트롤 창을 만들고 호스트된 컨트롤을 조언합니다.

virtual HWND CreateControlWindow(
    HWND hWndParent,
    RECT& rcPos);

매개 변수

hWndParent
컨트롤의 부모 창에 대한 핸들입니다.

rcPos
hWndParent를 기준으로 클라이언트 좌표에서 복합 컨트롤의 위치 사각형입니다.

Return Value

새로 만든 복합 컨트롤 대화 상자에 대한 핸들을 반환합니다.

설명

이 메서드는 CComCompositeControl::CreateCComCompositeControl::AdviseSinkMap을 호출합니다.

CComCompositeControl::m_hbrBackground

배경 브러시입니다.

HBRUSH m_hbrBackground;

CComCompositeControl::m_hWndFocus

현재 포커스가 있는 창의 핸들입니다.

HWND m_hWndFocus;

CComCompositeControl::SetBackgroundColorFromAmbient

컨테이너의 배경색을 사용하여 복합 컨트롤의 배경색을 설정하려면 이 메서드를 호출합니다.

HRESULT SetBackgroundColorFromAmbient();

Return Value

성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.

참고 항목

CComControl 클래스
복합 컨트롤 기본 사항
클래스 개요