대화 상자가 아닌 컨테이너에서 컨트롤을 사용 하 여 ActiveX 컨트롤 컨테이너:
SDI와 같은 응용 프로그램 또는 MDI 응용 프로그램에서 응용 프로그램의 창에 컨트롤을 포함 합니다.만들기 Visual C++에서 삽입 하는 래퍼 클래스의 멤버 함수 만들 수 있습니다는 컨트롤의 인스턴스를 동적으로 대화 상자에 대 한 필요 없이.
만들기 멤버 함수는 다음 매개 변수를 포함 합니다.
lpszWindowName
(있는 경우) 해당 컨트롤의 텍스트 또는 캡션 속성을 표시 하는 텍스트에 대 한 포인터입니다.dwStyle
창 스타일입니다.전체 목록을 보려면을 참조 하십시오. CWnd::CreateControl.rect
컨트롤의 크기와 위치를 지정합니다.pParentWnd
일반적으로 컨트롤의 부모 창에 지정 된 CDialog.다시 해야 NULL.nID
컨트롤 ID를 지정 하 고 컨테이너에서 사용 하 여 컨트롤을 참조할 수 있습니다.
하나의 예는 ActiveX 컨트롤을 동적으로 만들려면이 함수를 사용 하 여 SDI 응용 프로그램의 폼 보기에서 수 있습니다.다음 컨트롤의 인스턴스를 만들 수 있는 WM_CREATE 응용 프로그램의 처리기입니다.
이 예제에서 CMyView 주 보기 클래스인 CCirc 래퍼 클래스 이며 가변 원형H 헤더입니다 (.H) 파일의 래퍼 클래스입니다.
이 기능을 구현 하는 4 단계 프로세스입니다.
대화 상자가 아닌 창에서 있는 ActiveX 컨트롤을 동적으로 만들려면
가변 원형 삽입CMYVIEW에 H입니다.H, 방금 전에 CMyView 클래스 정의:
#include "circ.h"
멤버 변수를 추가 (형식의 CCirc)의 보호 된 섹션의 CMyView 클래스 정의에서 CMYVIEW 위치한.H:
class CMyView : public CView { ... protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); };
추가 된 WM_CREATE 메시지 처리기를 클래스에 CMyView.
처리기 함수에서 CMyView::OnCreate, 호출 하는 컨트롤의 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 컨트롤이 동적으로 만들어집니다.