방법: 사용자 정의 컨트롤 및 호스트 MDI 뷰 만들기
다음 단계에서는 .NET Framework 사용자 컨트롤을 만들고 컨트롤 클래스 라이브러리(특히 Windows 컨트롤 라이브러리 프로젝트)에서 사용자 컨트롤을 만든 다음, 프로젝트를 어셈블리로 컴파일하는 방법을 보여 줍니다. 그런 다음 CView 클래스 및 CWinFormsView 클래스에서 파생된 클래스를 사용하는 MFC 애플리케이션에서 컨트롤을 사용할 수 있습니다.
Windows Forms 사용자 컨트롤을 만들고 컨트롤 클래스 라이브러리를 작성하는 방법에 대한 자세한 내용은 방법: 사용자 컨트롤 작성을 참조 하세요.
참고 항목
경우에 따라 타사 그리드 컨트롤과 같은 Windows Forms 컨트롤은 MFC 애플리케이션에서 호스트될 때 안정적으로 작동하지 않을 수 있습니다. 권장되는 해결 방법은 MFC 애플리케이션에 Windows Forms 사용자 컨트롤을 배치하고 사용자 컨트롤 내에 타사 Grid 컨트롤을 배치하는 것입니다.
이 절차에서는 방법: 대화 상자에서 사용자 컨트롤 및 호스트 만들기의 절차에 따라 WindowsFormsControlLibrary1이라는 Windows Forms 컨트롤 라이브러리 프로젝트를 만들었다고 가정합니다.
MFC 호스트 애플리케이션을 만들려면
MFC 애플리케이션 프로젝트를 만듭니다.
[파일] 메뉴에서 [새로 만들기]를 선택한 다음 [프로젝트]를 클릭합니다. Visual C++ 폴더에서 MFC 애플리케이션을 선택합니다.
이름 상자에 솔루션 설정을 입력
MFC02
하고 솔루션에 추가로 변경합니다. 확인을 클릭합니다.MFC 애플리케이션 마법사에서 모든 기본값을 적용한 다음 마침을 클릭합니다. 이렇게 하면 다중 문서 인터페이스가 있는 MFC 애플리케이션이 만들어집니다.
CLR(공용 언어 런타임) 지원을 위한 프로젝트를 구성합니다.
솔루션 탐색기 프로젝트 노드를 마우스 오른쪽 단추로
MFC01
클릭하고 상황에 맞는 메뉴에서 속성을 선택합니다. 속성 페이지 대화 상자가 나타납니다.구성 속성에서 일반을 선택합니다. 프로젝트 기본값 섹션에서 공용 언어 런타임 지원을 공용 언어 런타임 지원(/clr)으로 설정합니다.
구성 속성에서 C/C++를 확장하고 일반 노드를 클릭합니다. 디버그 정보 형식을 Program Database(/Zi)로 설정합니다.
코드 생성 노드를 클릭합니다. 최소 다시 빌드 사용을 아니요(/Gm-)로 설정합니다. 또한 기본 런타임 검사를 기본값으로 설정합니다.
확인을 클릭하여 변경 내용을 적용합니다.
pch.h(Visual Studio 2017 이하의 stdafx.h)에서 다음 줄을 추가합니다.
#using <System.Windows.Forms.dll>
.NET 컨트롤에 대한 참조를 추가합니다.
솔루션 탐색기 프로젝트 노드를 마우스 오른쪽 단추로
MFC02
클릭하고 추가, 참조를 선택합니다. 속성 페이지에서 새 참조 추가를 클릭하고 WindowsFormsControlLibrary1(프로젝트 탭 아래)을 선택한 다음 확인을 클릭합니다. 이렇게 하면 프로그램이 컴파일되도록 /FU 컴파일러 옵션 형식의 참조가 추가됩니다. 또한 프로그램이 실행되도록 WindowsFormsControlLibrary1.dllMFC02
프로젝트 디렉터리에 복사합니다.stdafx.h에서 다음 줄을 찾습니다.
#endif // _AFX_NO_AFXCMN_SUPPORT
위에 다음 줄을 추가합니다.
#include <afxwinforms.h> // MFC Windows Forms support
CWinFormsView에서 상속되도록 뷰 클래스를 수정합니다.
MFC02View.h에서 코드가 다음과 같이 표시되도록 CView 를 CWinFormsView로 바꿉니다.
class CMFC02View : public CWinFormsView { };
MDI 애플리케이션에 보기를 더 추가하려면 만든 각 보기에 대해 CWinApp::AddDocTemplate을 호출해야 합니다.
MFC02View.cpp 파일을 수정하여 IMPLEMENT_DYNCREATE 매크로 및 메시지 맵에서 CView를 CWinFormsView로 변경하고 기존 빈 생성자를 아래 표시된 생성자로 바꿉니다.
IMPLEMENT_DYNCREATE(CMFC02View, CWinFormsView) CMFC02View::CMFC02View(): CWinFormsView(WindowsFormsControlLibrary1::UserControl1::typeid) { } BEGIN_MESSAGE_MAP(CMFC02View, CWinFormsView) //leave existing body as is END_MESSAGE_MAP()
프로젝트를 빌드하고 실행합니다.
솔루션 탐색기 MFC02를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택합니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다.