방법: 대화 상자에 사용자 정의 컨트롤 및 호스트 만들기
업데이트: 2007년 11월
이 항목의 절차에서는 새로운 대화 상자 기반(CDialog Class) MFC 프로젝트를 만드는 경우를 가정하고 진행하지만, 기존의 MFC 대화 상자에도 Windows Form 컨트롤에 대한 지원을 추가할 수 있습니다.
.NET 사용자 정의 컨트롤을 만들려면
WindowsControlLibrary1이라는 새 Visual C# Windows 컨트롤 라이브러리 프로젝트를 만듭니다.
파일 메뉴에서 새로 만들기를 선택한 다음 프로젝트를 선택합니다. Visual C# 폴더에서 Windows 컨트롤 라이브러리 아이콘을 선택합니다.
확인을 클릭하여 기본 프로젝트 이름인 WindowsControlLibrary1을 적용합니다.
.NET 컨트롤의 기본 이름은 UserControl1입니다.
UserControl1에 하위 컨트롤을 추가합니다.
도구 상자에서 모든 Windows Forms 목록을 엽니다. Button 컨트롤을 UserControl1 디자인 화면에 끌어 놓습니다.
TextBox 컨트롤도 추가합니다.
UserControl1.Designer.cs 파일에서 TextBox 및 Button의 선언을 private이 아닌 public으로 변경합니다.
프로젝트를 빌드합니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
생성된 DLL의 전체 경로와 파일 이름을 MFC 응용 프로그램에 입력해야 하므로 빌드 로그에서 이 정보를 찾아 기록해 두는 것이 좋습니다.
MFC 호스트 응용 프로그램을 만들려면
새 MFC 응용 프로그램 프로젝트를 만듭니다.
파일 메뉴에서 새로 만들기를 선택한 다음 프로젝트를 선택합니다. Visual C++ 폴더에서 MFC 응용 프로그램 아이콘을 선택합니다.
이름 상자에 MFC01을 입력합니다. 솔루션 설정을 솔루션에 추가로 변경합니다. 확인을 클릭합니다. MFC 응용 프로그램 마법사가 나타납니다.
MFC 응용 프로그램 마법사에서 응용 프로그램 종류를 선택합니다. 대화 상자 기반을 선택합니다. 나머지 항목은 기본값을 적용한 다음 마침을 클릭합니다. 이렇게 하면 MFC 대화 상자가 있는 MFC 응용 프로그램이 작성됩니다.
MFC 대화 상자에 자리 표시자 컨트롤을 추가합니다.
리소스 뷰 탭을 클릭합니다. 리소스 뷰에서 IDD_MFC01_DIALOG를 두 번 클릭합니다. 대화 상자 리소스가 리소스 편집기에 나타납니다.
도구 상자에서 대화 상자 편집기 목록을 엽니다. 정적 텍스트 컨트롤을 대화 상자 리소스에 끌어 놓습니다. 정적 텍스트 컨트롤은 .NET Windows Forms 컨트롤에 대한 자리 표시자로 사용됩니다. Windows Forms 컨트롤의 크기에 맞도록 이 컨트롤의 크기를 조정합니다.
속성 창에서 정적 텍스트 컨트롤의 ID를 IDC_CTRL1로 변경하고 TabStop 속성을 True로 변경합니다.
프로젝트를 구성합니다.
솔루션 탐색기에서 MFC01 프로젝트 노드를 마우스 오른쪽 단추로 클릭한 다음 상황에 맞는 메뉴에서 속성을 선택합니다. 속성 페이지 대화 상자가 나타납니다.
속성 페이지 대화 상자의 구성 속성 트리 컨트롤에서 일반을 선택한 다음 프로젝트 기본값 섹션에서 공용 언어 런타임 지원을 공용 언어 런타임 지원(/clr)으로 설정합니다. 확인을 클릭합니다.
.NET 컨트롤에 대한 참조를 추가합니다.
솔루션 탐색기에서 MFC01 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 참조를 선택합니다. 속성 페이지에서 새 참조 추가를 클릭하고 프로젝트 탭 아래에서 WindowsControlLibrary1을 선택한 다음 확인을 클릭합니다. 이렇게 하면 프로그램이 컴파일되도록 /FU 컴파일러 옵션의 형태로 참조가 추가되고 프로그램이 실행되도록 WindowsControlLibrary1.dll이 MFC01 프로젝트 디렉터리에 복사됩니다.
stdafx.h에서 다음 줄을 찾습니다.
#endif // _AFX_NO_AFXCMN_SUPPORT
위에서 찾은 줄 위에 다음 코드를 추가합니다.
#include <afxwinforms.h> // MFC Windows Forms support
관리되는 컨트롤을 만들기 위한 코드를 추가합니다.
먼저 관리되는 컨트롤을 선언합니다. MFC01Dlg.h에서 대화 상자 클래스의 선언으로 이동하여 다음과 같이 Protected 범위에서 사용자 정의 컨트롤에 대한 데이터 멤버를 추가합니다.
class CMFC01Dlg : public CDialog { // ... // Data member for the .NET User Control: CWinFormsControl<WindowsControlLibrary1::UserControl1> m_ctrl1;
그런 다음 관리되는 컨트롤에 대한 구현을 제공합니다. MFC01Dlg.cpp에서 동일한 파일에 있는 CAboutDlg::DoDataExchange가 아닌 MFC 응용 프로그램 마법사를 통해 생성된 CMFC01Dlg::DoDataExchange의 대화 상자 재정의로 이동합니다. 여기에 관리되는 컨트롤을 만들기 위한 다음 코드를 추가하고 이를 정적 자리 표시자 IDC_CTRL1과 연결합니다.
void CMFC01Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1); }
프로젝트를 빌드하여 실행합니다.
솔루션 탐색기에서 MFC01을 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택합니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다. 이제 MFC 대화 상자에 Windows Form 컨트롤이 표시됩니다.