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
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::Create 및 CComCompositeControl::AdviseSinkMap을 호출합니다.
CComCompositeControl::m_hbrBackground
배경 브러시입니다.
HBRUSH m_hbrBackground;
CComCompositeControl::m_hWndFocus
현재 포커스가 있는 창의 핸들입니다.
HWND m_hWndFocus;
CComCompositeControl::SetBackgroundColorFromAmbient
컨테이너의 배경색을 사용하여 복합 컨트롤의 배경색을 설정하려면 이 메서드를 호출합니다.
HRESULT SetBackgroundColorFromAmbient();
Return Value
성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.