방법: 대화 상자에 사용자 정의 컨트롤 및 호스트 만들기
이 문서의 단계에서는 대화 상자 기반(CDialog 클래스) MFC(Microsoft Foundation Classes) 프로젝트를 만들고 있다고 가정하지만 기존 MFC 대화 상자에 Windows Forms 컨트롤에 대한 지원을 추가할 수도 있습니다.
.NET 사용자 컨트롤을 만들려면
라는 Visual C# Windows Forms 컨트롤 라이브러리 프로젝트를 만듭니다
WindowsFormsControlLibrary1
.파일 메뉴에서 새로 만들기 를 클릭한 다음 프로젝트를 클릭합니다. Visual C# 폴더에서 Windows Forms 컨트롤 라이브러리를 선택합니다.
WindowsFormsControlLibrary1
확인을 클릭하여 프로젝트 이름을 적용합니다.기본적으로 .NET 컨트롤의 이름은 .NET 컨트롤
UserControl1
입니다.자식 컨트롤을 .에
UserControl1
추가합니다.도구 상자에서 모든 Windows Forms 목록을 엽니다. 단추 컨트롤을 디자인 화면으로
UserControl1
끕니다.TextBox 컨트롤도 추가합니다.
솔루션 탐색기 UserControl1.Designer.cs 두 번 클릭하여 편집용으로 엽니다. TextBox 및 단추의 선언을 .로
private
public
변경합니다.프로젝트를 빌드합니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
MFC 호스트 애플리케이션을 만들려면
MFC 애플리케이션 프로젝트를 만듭니다.
파일 메뉴에서 새로 만들기 를 클릭한 다음 프로젝트를 클릭합니다. Visual C++ 폴더에서 MFC 애플리케이션을 선택합니다.
이름 상자에
MFC01
을 입력합니다. 솔루션 설정을 솔루션에 추가로 변경합니다. 확인을 클릭합니다.MFC 애플리케이션 마법사에서 애플리케이션 유형에 대해 대화 상자 기반을 선택합니다. 나머지 기본 설정을 적용하고 마침을 클릭합니다. 그러면 MFC 대화 상자가 있는 MFC 애플리케이션이 만들어집니다.
MFC 대화 상자에 자리 표시자 컨트롤을 추가합니다.
보기 메뉴에서 리소스 보기를 클릭합니다. 리소스 보기에서 대화 상자 폴더를 확장하고 두 번 클릭합니다
IDD_MFC01_DIALOG
. 대화 상자 리소스가 리소스 편집기에서 나타납니다.도구 상자에서 대화 상자 편집기 목록을 엽니다. 정적 텍스트 컨트롤을 대화 상자 리소스로 끌어옵니다. 정적 텍스트 컨트롤은 .NET Windows Forms 컨트롤의 자리 표시자로 사용됩니다. Windows Forms 컨트롤의 크기로 크기를 조정합니다.
속성 창에서 정적 텍스트 컨트롤의 ID를
IDC_CTRL1
변경하고 TabStop 속성을 True로 변경합니다.CLR(공용 언어 런타임) 지원을 위한 프로젝트를 구성합니다.
솔루션 탐색기 MFC01 프로젝트 노드를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
속성 페이지 대화 상자의 구성 속성 아래에서 일반을 선택합니다. 프로젝트 기본값 섹션에서 공용 언어 런타임 지원을 공용 언어 런타임 지원(/clr)으로 설정합니다.
구성 속성에서 C/C++를 확장하고 일반 노드를 선택합니다. 디버그 정보 형식을 Program Database(/Zi)로 설정합니다.
코드 생성 노드를 선택합니다. 최소 다시 빌드 사용을 아니요(/Gm-)로 설정합니다. 또한 기본 런타임 검사를 기본값으로 설정합니다.
확인 를 클릭하여 수정사항들을 적용합니다.
.NET 컨트롤에 대한 참조를 추가합니다.
솔루션 탐색기 MFC01 프로젝트 노드를 마우스 오른쪽 단추로 클릭한 다음 추가, 참조를 클릭합니다. 속성 페이지에서 새 참조 추가를 클릭하고 WindowsFormsControlLibrary1(프로젝트 탭 아래)을 선택한 다음 확인을 클릭합니다. 그러면 프로그램이 컴파일되도록 /FU 컴파일러 옵션 형식의 참조가 추가됩니다. 또한 프로그램이 실행되도록 \MFC01\ 프로젝트 폴더에 WindowsFormsControlLibrary1.dll 복사본을 배치합니다.
Stdafx.h에서 다음 줄을 찾습니다.
#endif // _AFX_NO_AFXCMN_SUPPORT
그 위에 다음 줄을 추가합니다.
#include <afxwinforms.h> // MFC Windows Forms support
관리되는 컨트롤을 만드는 코드를 추가합니다.
먼저 관리되는 컨트롤을 선언합니다. MFC01Dlg.h에서 대화 상자 클래스의 선언으로 이동하고 다음과 같이 보호된 범위에서 사용자 컨트롤에 대한 데이터 멤버를 추가합니다.
class CMFC01Dlg : public CDialog { // ... // Data member for the .NET User Control: CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_ctrl1;
다음으로 관리되는 컨트롤에 대한 구현을 제공합니다. MFC01Dlg.cpp MFC 애플리케이션 마법사에서 생성된 대화 상자 재정의
CMFC01Dlg::DoDataExchange
에서(같은 파일에 있는 것이 아님CAboutDlg::DoDataExchange
) 다음 코드를 추가하여 관리되는 컨트롤을 만들고 정적 자리 표시자 IDC_CTRL1 연결합니다.void CMFC01Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1); }
프로젝트를 빌드하고 실행합니다.
솔루션 탐색기 MFC01을 마우스 오른쪽 단추로 클릭한 다음 시작 프로젝트로 설정을 클릭합니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다. MFC 대화 상자에 Windows Forms 컨트롤이 표시됩니다.