다음을 통해 공유


ActiveX 컨트롤 컨테이너: 대화 상자가 아닌 컨테이너에서 컨트롤 사용

SDI 또는 MDI 애플리케이션과 같은 일부 애플리케이션에서는 애플리케이션 창에 컨트롤을 포함하려고 합니다. Visual C++에 의해 삽입된 래퍼 클래스의 멤버 만들기 함수는 대화 상자 없이도 동적으로 컨트롤의 인스턴스를 만들 수 있습니다.

멤버 만들기 함수에는 다음과 같은 매개 변수가 있습니다.

lpszWindowName
컨트롤의 Text 또는 Caption 속성에 표시할 텍스트에 대한 포인터입니다(있는 경우).

dwStyle
Windows 스타일. 전체 목록은 CWnd::CreateControl을 참조하세요.

rect
컨트롤의 크기와 위치를 지정합니다.

pParentWnd
컨트롤의 부모 창(일반적으로 .)을 CDialog지정합니다. NULL이 아니어야 합니다.

nID
컨트롤 ID를 지정하고 컨테이너에서 컨트롤을 참조하는 데 사용할 수 있습니다.

이 함수를 사용하여 ActiveX 컨트롤을 동적으로 만드는 한 가지 예는 SDI 애플리케이션의 양식 보기에 있습니다. 그런 다음 애플리케이션의 처리기에서 컨트롤의 인스턴스를 WM_CREATE 만들 수 있습니다.

이 예제에서는 CMyView 기본 뷰 클래스, CCirc 래퍼 클래스 및 CIRC입니다. H는 헤더입니다(. 래퍼 클래스의 H) 파일입니다.

이 기능을 구현하는 것은 4단계 프로세스입니다.

대화 상자가 아닌 창에서 ActiveX 컨트롤을 동적으로 만들려면

  1. CIRC를 삽입합니다. CMYVIEW의 H입니다. H, 클래스 정의 바로 앞 CMyView :

    #include "circ.h"
    
  2. CMYVIEW에 있는 클래스 정의의 보호된 섹션에 CMyView 멤버 변수(형식CCirc)를 추가합니다. H:

    class CMyView : public CView
    {
    
    protected:
    CCirc m_myCtl;
    
    public:
    afx_msg void OnViewCircdlg();
    }
    ;
    
  3. 클래스CMyViewWM_CREATE 메시지 처리기를 추가합니다.

  4. 처리기 함수CMyView::OnCreate에서 포인터를 부모 창으로 사용하여 this 컨트롤의 Create 함수를 호출합니다.

    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. 프로젝트를 다시 빌드합니다. Circ 컨트롤은 애플리케이션의 뷰를 만들 때마다 동적으로 만들어집니다.

참고 항목

ActiveX 컨트롤 컨테이너