다음을 통해 공유


ActiveX 컨트롤 컨테이너: ActiveX 컨트롤 컨테이너에서 ActiveX 컨트롤 프로그래밍

이 문서에서는 포함된 ActiveX 컨트롤의 노출된 메서드속성 에 액세스하는 프로세스를 설명합니다.

Important

ActiveX는 새로운 개발에 사용하지 않아야 하는 레거시 기술입니다. ActiveX를 대체하는 최신 기술에 관한 자세한 내용은 ActiveX 컨트롤을 참조하세요.

기본적으로 다음 단계를 수행합니다.

  1. 갤러리를 사용하여 ActiveX 컨테이너 프로젝트에 ActiveX 컨트롤을 삽입합니다.

  2. ActiveX 컨트롤 래퍼 클래스와 동일한 형식의 멤버 변수 (또는 다른 형식의 액세스)를 정의합니다.

  3. 래퍼 클래스의 미리 정의된 멤버 함수를 사용하여 ActiveX 컨트롤 을 프로그래밍합니다.

이 설명에서는 ActiveX 컨트롤 지원을 사용하여 대화 상자 기반 프로젝트(컨테이너라는 이름)를 만들었다고 가정합니다. Circ 샘플 컨트롤인 Circ가 결과 프로젝트에 추가됩니다.

Circ 컨트롤이 프로젝트에 삽입되면(1단계) 애플리케이션의 기본 대화 상자에 Circ 컨트롤의 인스턴스를 삽입합니다.

프로시저

대화 상자 템플릿에 Circ 컨트롤을 추가하려면

  1. ActiveX 컨트롤 컨테이너 프로젝트를 로드합니다. 이 예제에서는 프로젝트를 사용합니다 Container .

  2. 리소스 보기 탭을 클릭합니다.

  3. 대화 상자 폴더를 엽니다.

  4. 기본 대화 상자 서식 파일을 두 번 클릭합니다. 이 예제에서는 IDD_CONTAINER_DIALOG 사용합니다.

  5. 도구 상자에서 Circ 컨트롤 아이콘을 클릭합니다.

  6. 대화 상자 내의 스폿을 클릭하여 Circ 컨트롤을 삽입합니다.

  7. [파일] 메뉴에서 [모두 저장]을 선택하여 모든 수정 사항을 대화 상자 템플릿에 저장합니다.

프로젝트 수정

컨테이너 애플리케이션이 Circ 컨트롤에 액세스할 수 있도록 Visual C++는 래퍼 클래스() 구현 파일(CCirc)을 자동으로 추가합니다. CPP) - 컨테이너 프로젝트 및 래퍼 클래스 헤더(. H) 대화 상자 헤더 파일에 대한 파일:

#include "circ.h"

래퍼 클래스 헤더(. H) 파일

Circ 컨트롤 CCirc 에 대한 속성을 가져와서 설정하고 메서드를 호출하기 위해 래퍼 클래스는 노출된 모든 메서드 및 속성의 선언을 제공합니다. 예제에서 이러한 선언은 CIRC.H에서 찾을 수 있습니다. 다음 샘플은 ActiveX 컨트롤의 노출된 인터페이스를 정의하는 클래스 CCirc 의 부분입니다.

class CCirc : public CWnd
{
// Functions
//

void AboutBox()
{
   InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}

// Properties
//

unsigned long GetBackColor()
{
   unsigned long result;
   GetProperty(DISPID_BACKCOLOR, VT_UI4, (void*)& result);
   return result;
}
void SetBackColor(unsigned long propVal)
{
   SetProperty(DISPID_BACKCOLOR, VT_UI4, propVal);
}
signed char GetCircleShape()
{
   signed char result;
   GetProperty(0x1, VT_I1, (void*)& result);
   return result;
}
void SetCircleShape(signed char propVal)
{
   SetProperty(0x1, VT_I1, propVal);
}
short GetCircleOffset()
{
   short result;
   GetProperty(0x3, VT_I2, (void*)& result);
   return result;
}
void SetCircleOffset(short propVal)
{
   SetProperty(0x3, VT_I2, propVal);
}
CString GetCaption()
{
   CString result;
   GetProperty(DISPID_CAPTION, VT_BSTR, (void*)& result);
   return result;
}
void SetCaption(CString propVal)
{
   SetProperty(DISPID_CAPTION, VT_BSTR, propVal);
}
COleFont GetFont()
{
   LPDISPATCH result;
   GetProperty(DISPID_FONT, VT_DISPATCH, (void*)& result);
   return COleFont(result);
}
void SetFont(LPDISPATCH propVal)
{
   SetProperty(DISPID_FONT, VT_DISPATCH, propVal);
}
unsigned long GetForeColor()
{
   unsigned long result;
   GetProperty(DISPID_FORECOLOR, VT_UI4, (void*)& result);
   return result;
}
void SetForeColor(unsigned long propVal)
{
   SetProperty(DISPID_FORECOLOR, VT_UI4, propVal);
}
CString GetNote()
{
   CString result;
   GetProperty(0x4, VT_BSTR, (void*)& result);
   return result;
}
void SetNote(CString propVal)
{
   SetProperty(0x4, VT_BSTR, propVal);
}
unsigned long GetFlashColor()
{
   unsigned long result;
   GetProperty(0x2, VT_UI4, (void*)& result);
   return result;
}
void SetFlashColor(unsigned long propVal)
{
   SetProperty(0x2, VT_UI4, propVal);
}
};

그런 다음 일반 C++ 구문을 사용하여 애플리케이션의 다른 프로시저에서 이러한 함수를 호출할 수 있습니다. 이 멤버 함수 집합을 사용하여 컨트롤의 메서드 및 속성에 액세스하는 방법에 대한 자세한 내용은 ActiveX 컨트롤 프로그래밍 섹션 을 참조하세요.

프로젝트에 대한 멤버 변수 수정

ActiveX 컨트롤이 프로젝트에 추가되고 대화 상자 컨테이너에 포함되면 프로젝트의 다른 부분에서 액세스할 수 있습니다. 컨트롤에 액세스하는 가장 쉬운 방법은 Visual C++에서 프로젝트에 추가한 래퍼 클래스와 동일한 형식의 대화 상자 클래스 CContainerDlg (2단계)의 멤버 변수를 만드는 것입니다. 그런 다음 언제든지 멤버 변수를 사용하여 포함된 컨트롤에 액세스할 수 있습니다.

멤버 변수 추가 대화 상자에서 m_circctl 멤버 변수를 프로젝트에 추가하면 헤더 파일()에 다음 줄도 추가됩니다. H) 클래스:CContainerDlg

class CContainerDlg : public CDialog
{
   DECLARE_DYNAMIC(CContainerDlg)

public:
   CContainerDlg(CWnd* pParent = NULL);   // standard constructor
   virtual ~CContainerDlg();

   virtual void OnFinalRelease();

   // Dialog Data
   enum { IDD = IDD_CONTAINER_DIALOG };

protected:
   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

   DECLARE_MESSAGE_MAP()
   DECLARE_DISPATCH_MAP()
   DECLARE_INTERFACE_MAP()
public:
   CCirc m_circctl;
};

또한 DDX_Control 호출은 '의 구현DoDataExchangeCContainerDlg자동으로 추가됩니다.

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

ActiveX 컨트롤 프로그래밍

이 시점에서 ActiveX 컨트롤을 대화 상자 템플릿에 삽입하고 이에 대한 멤버 변수를 만들었습니다. 이제 공통 C++ 구문을 사용하여 포함된 컨트롤의 속성 및 메서드에 액세스할 수 있습니다.

앞에서 설명한 대로( 래퍼 클래스 헤더(. H) 파일), 헤더 파일(. H)이면 래퍼 클래스의 CCirc 경우 CIRC입니다. H는 노출된 속성 값을 가져와서 설정하는 데 사용할 수 있는 멤버 함수 목록을 포함합니다. 노출된 메서드에 대한 멤버 함수도 사용할 수 있습니다.

컨트롤의 속성을 수정하는 일반적인 위치는 기본 대화 상자 클래스의 멤버 함수에 OnInitDialog 있습니다. 이 함수는 대화 상자가 나타나기 직전에 호출되며 컨트롤을 포함하여 내용을 초기화하는 데 사용됩니다.

다음 코드 예제에서는 m_circctl 멤버 변수를 사용하여 포함된 Circ 컨트롤의 Caption 및 CircleShape 속성을 수정합니다.

BOOL CContainerDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_circctl.SetCaption(_T("Circ 2 Control"));
   if (!m_circctl.GetCircleShape())
      m_circctl.SetCircleShape(TRUE);

   return TRUE;  // return TRUE unless you set the focus to a control
}

참고 항목

ActiveX 컨트롤 컨테이너