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 컨트롤을 동적으로 만들려면
CIRC를 삽입합니다. CMYVIEW의 H입니다. H, 클래스 정의 바로 앞
CMyView
:#include "circ.h"
CMYVIEW에 있는 클래스 정의의 보호된 섹션에
CMyView
멤버 변수(형식CCirc
)를 추가합니다. H:class CMyView : public CView {
protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); } ;
클래스
CMyView
에WM_CREATE
메시지 처리기를 추가합니다.처리기 함수
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; }
프로젝트를 다시 빌드합니다. Circ 컨트롤은 애플리케이션의 뷰를 만들 때마다 동적으로 만들어집니다.