Udostępnij za pośrednictwem


Kontenery formantów ActiveX: programowanie formantów ActiveX w kontenerze formantów ActiveX

W tym artykule opisano proces uzyskiwania dostępu do uwidocznionych metod i właściwości osadzonych kontrolek ActiveX.

Ważne

ActiveX to starsza technologia, która nie powinna być używana do tworzenia nowych rozwiązań. Aby uzyskać więcej informacji na temat nowoczesnych technologii zastępujących activex, zobacz Kontrolki ActiveX.

Zasadniczo wykonasz następujące kroki:

  1. Wstaw kontrolkę ActiveX do projektu kontenera ActiveX przy użyciu galerii.

  2. Zdefiniuj zmienną składową (lub inną formę dostępu) tego samego typu co klasa otoki formantów ActiveX.

  3. Zaprogramuj kontrolkę ActiveX przy użyciu wstępnie zdefiniowanych funkcji składowych klasy otoki.

W tej dyskusji założono, że utworzono projekt oparty na oknach dialogowych (o nazwie Container) z obsługą kontrolek ActiveX. Do wynikowego projektu zostanie dodana kontrolka Circ próbki Circ.

Po wstawieniu kontrolki Circ do projektu (krok 1) wstaw wystąpienie kontrolki Circ do głównego okna dialogowego aplikacji.

Procedury

Aby dodać kontrolkę Circ do szablonu okna dialogowego

  1. Załaduj projekt kontenera kontrolek ActiveX. W tym przykładzie Container użyj projektu.

  2. Kliknij kartę Widok zasobów.

  3. Otwórz folder Dialog.

  4. Kliknij dwukrotnie szablon głównego okna dialogowego. W tym przykładzie użyj IDD_CONTAINER_DIALOG.

  5. Kliknij ikonę kontrolki Circ w przyborniku.

  6. Kliknij miejsce w oknie dialogowym, aby wstawić kontrolkę Circ.

  7. W menu Plik wybierz pozycję Zapisz wszystko, aby zapisać wszystkie modyfikacje szablonu okna dialogowego.

Modyfikacje projektu

Aby umożliwić aplikacji Kontener uzyskiwanie dostępu do kontrolki Circ, program Visual C++ automatycznie dodaje plik implementacji klasy otoki (CCirc). CPP) do projektu Container i nagłówka klasy otoki (. H) plik do pliku nagłówka okna dialogowego:

#include "circ.h"

Nagłówek klasy otoki (. Plik H)

Aby uzyskać i ustawić właściwości (i wywołać metody) dla kontrolki Circ, CCirc klasa otoki zawiera deklarację wszystkich uwidocznionych metod i właściwości. W tym przykładzie te deklaracje znajdują się w pliku CIRC.H. Poniższy przykład to część klasy CCirc , która definiuje uwidocznione interfejsy kontrolki 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);
}
};

Te funkcje można następnie wywoływać z innych procedur aplikacji przy użyciu normalnej składni języka C++. Aby uzyskać więcej informacji na temat używania tego zestawu funkcji składowej w celu uzyskania dostępu do metod i właściwości kontrolki, zobacz sekcję Programowanie kontrolki ActiveX.

Modyfikacje zmiennych składowych w projekcie

Po dodaniu kontrolki ActiveX do projektu i osadzonej w kontenerze okna dialogowego można uzyskać do niego dostęp przez inne części projektu. Najprostszym sposobem uzyskania dostępu do kontrolki jest utworzenie zmiennej składowej klasy CContainerDlg okna dialogowego (krok 2), która jest tego samego typu co klasa otoki dodana do projektu przez program Visual C++. Następnie możesz użyć zmiennej składowej, aby uzyskać dostęp do osadzonej kontrolki w dowolnym momencie.

Gdy okno dialogowe Dodawanie zmiennej składowej dodaje zmienną składową m_circctl do projektu, dodaje również następujące wiersze do pliku nagłówka (. H) CContainerDlg klasy:

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;
};

Ponadto wywołanie DDX_Control jest automatycznie dodawane do CContainerDlgimplementacji DoDataExchangepolecenia :

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programowanie kontrolki ActiveX

W tym momencie wstawiono kontrolkę ActiveX do szablonu okna dialogowego i utworzono dla niej zmienną składową. Teraz możesz użyć typowej składni języka C++, aby uzyskać dostęp do właściwości i metod osadzonej kontrolki.

Jak wspomniano (w nagłówku klasy otoki (. H) Plik), plik nagłówka (. H) dla CCirc klasy otoki, w tym przypadku CIRC. H, zawiera listę funkcji składowych, których można użyć do pobierania i ustawiania dowolnej uwidocznionej wartości właściwości. Dostępne są również funkcje składowe dla uwidocznionych metod.

Typowym miejscem modyfikowania właściwości kontrolki jest OnInitDialog funkcja składowa głównej klasy okien dialogowych. Ta funkcja jest wywoływana tuż przed wyświetleniem okna dialogowego i służy do inicjowania jego zawartości, w tym dowolnej z jego kontrolek.

W poniższym przykładzie kodu użyto zmiennej składowej m_circctl , aby zmodyfikować właściwości Caption i CircleShape osadzonej kontrolki Circ:

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
}

Zobacz też

Kontenery kontrolek ActiveX