Udostępnij za pośrednictwem


Kontenery kontrolek ActiveX: używanie kontrolek w kontenerze innym niż okno dialogowe

W niektórych aplikacjach, takich jak aplikacja SDI lub MDI, należy osadzić kontrolkę w oknie aplikacji. Funkcja Create member klasy otoki wstawiona przez program Visual C++może dynamicznie utworzyć wystąpienie kontrolki bez konieczności korzystania z okna dialogowego.

Funkcja Create member ma następujące parametry:

lpszWindowName
Wskaźnik do tekstu, który ma być wyświetlany we właściwości Text lub Caption kontrolki (jeśli istnieje).

Dwstyle
Style systemu Windows. Aby uzyskać pełną listę, zobacz CWnd::CreateControl.

Rect
Określa rozmiar i położenie kontrolki.

pParentWnd
Określa okno nadrzędne kontrolki, zwykle CDialog. Nie może mieć wartości NULL.

Nid
Określa identyfikator kontrolki i może być używany przez kontener do odwoływania się do kontrolki.

Jednym z przykładów użycia tej funkcji do dynamicznego tworzenia kontrolki ActiveX jest widok formularza aplikacji SDI. Następnie można utworzyć wystąpienie kontrolki w WM_CREATE procedurze obsługi aplikacji.

W tym przykładzie CMyView jest to klasa widoku głównego, CCirc to klasa otoki i CIRC. H to nagłówek (. H) plik klasy otoki.

Implementowanie tej funkcji jest procesem czteroetapowym.

Aby dynamicznie utworzyć kontrolkę ActiveX w oknie spoza okna dialogowego

  1. Wstaw CIRC. H w programie CMYVIEW. H, tuż przed definicją CMyView klasy:

    #include "circ.h"
    
  2. Dodaj zmienną składową (typu CCirc) do chronionej sekcji definicji klasy znajdującej CMyView się w programie CMYVIEW. H:

    class CMyView : public CView
    {
    
    protected:
    CCirc m_myCtl;
    
    public:
    afx_msg void OnViewCircdlg();
    }
    ;
    
  3. Dodaj procedurę obsługi komunikatów WM_CREATE do klasy CMyView.

  4. W funkcji CMyView::OnCreateobsługi wykonaj wywołanie funkcji kontrolki Create przy użyciu this wskaźnika jako okna nadrzędnego:

    int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
       if (CView::OnCreate(lpCreateStruct) == -1)
          return -1;
    
       m_myCtl.Create(NULL, WS_VISIBLE, CRect(50, 50, 100, 100), this, 0);
       m_myCtl.SetCaption(_T("Control created"));
    
       return 0;
    }
    
  5. Ponownie skompiluj projekt. Kontrolka Circ zostanie utworzona dynamicznie po utworzeniu widoku aplikacji.

Zobacz też

Kontenery kontrolek ActiveX