다음을 통해 공유


ActiveX 컨트롤 컨테이너: 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)

Get 및 속성 설정 및 메서드를 호출 하 Circ 컨트롤의 CCirc 래퍼 클래스 선언 모두 노출 된 메서드 및 속성을 제공 합니다.예제에서는 이러한 선언이 가변 원형에서 발견H.다음 샘플 클래스 부분입니다 CCirc 는 ActiveX 컨트롤의 노출 된 인터페이스를 정의 합니다.

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 컨트롤을 프로젝트에 추가 되 고 대화 상자 컨테이너에 포함 되 면 프로젝트의 다른 부분에서 액세스할 수 있습니다.컨트롤에 액세스 하는 가장 쉬운 방법은 것 멤버 변수를 만듭니다 는 대화 상자 클래스의 CContainerDlg (2, 즉 단계) 동일한 형식의 래퍼 클래스에서 Visual C++ 프로젝트에 추가 합니다.다음 언제 든 지 포함 된 컨트롤에 액세스 하는 멤버 변수를 사용할 수 있습니다.

때의 멤버 변수 추가 추가 대화 상자는 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 자동으로 추가 됩니다 있는 CContainerDlg의 구현의 DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

ActiveX 컨트롤 프로그래밍

이 시점에서 대화 서식 파일에 있는 ActiveX 컨트롤에 삽입 하 고 멤버 변수를 생성 했습니다.이제 일반적인 C++ 구문을 포함 된 컨트롤의 메서드와 속성에 액세스할 수 있습니다.

언급 한 것 처럼 (에 는 래퍼 클래스 헤더 (.H)), 헤더 파일 (.H)에 있는 CCirc 이 경우 가변 원형에서 래퍼 클래스H, get 및 노출 된 속성 값을 설정 하는 데 사용할 수 있는 멤버 함수 목록이 포함 되어 있습니다.노출 된 메서드에 대 한 멤버 함수를 사용할 수도 있습니다.

컨트롤의 속성을 수정 하려면 공통 장소입니다 있는 OnInitDialog 주 대화 상자 클래스의 멤버 함수입니다.대화 상자가 나타나고 해당 컨트롤을 포함 하 여 내용을 초기화 하는 데 사용 됩니다 방금 전에이 함수가 호출 됩니다.

다음 코드 예제에서는 사용 하는 m_circctl 멤버 변수에 포함된 Circ 컨트롤의 캡션 및 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 컨트롤 컨테이너