방법: Windows Forms 컨트롤에 명령 라우팅 추가
CWinFormsView 는 명령 및 업데이트 명령 UI 메시지를 사용자 컨트롤로 라우팅하여 MFC 명령(예: 프레임 메뉴 항목 및 도구 모음 단추)을 처리할 수 있도록 합니다.
사용자 컨트롤은 다음 예제와 같이 ICommandTarget::Initialize를 사용하여 명령 원본 개체에 m_CmdSrc
대한 참조를 저장합니다. 사용 ICommandTarget
하려면 mfcmifc80.dll에 대한 참조를 추가해야 합니다.
CWinFormsView
는 관리되는 사용자 컨트롤에 전달하여 몇 가지 일반적인 MFC 보기 알림을 처리합니다. 이러한 알림에는 OnInitialUpdate, OnUpdate 및 OnActivateView 메서드가 포함됩니다.
이 항목에서는 이전에 방법: 대화 상자에서 사용자 컨트롤 및 호스트 만들기 및 방법: 사용자 컨트롤 및 호스트 MDI 뷰 만들기를 완료한 것으로 가정합니다.
MFC 호스트 애플리케이션을 만들려면
방법: 대화 상자에서 사용자 컨트롤 및 호스트 만들기에서 만든 Windows Forms 컨트롤 라이브러리를 엽니다.
mfcmifc80.dll에 대한 참조를 추가합니다. 이 작업은 솔루션 탐색기 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가, 참조를 선택한 다음 Microsoft Visual Studio 10.0\VC\atlmfc\lib로 이동하여 수행할 수 있습니다.
UserControl1.Designer.cs를 열고 다음 using 문을 추가합니다.
using Microsoft.VisualC.MFC;
또한 UserControl1.Designer.cs에서 다음 줄을 변경합니다.
partial class UserControl1
다음으로 변경됩니다.
partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
다음을 위한 클래스 정의의 첫 번째 줄로 추가합니다
UserControl1
.private ICommandSource m_CmdSrc;
다음 메서드 정의를 추가합니다
UserControl1
(다음 단계에서 MFC 컨트롤의 ID를 만듭니다).public void Initialize (ICommandSource cmdSrc) { m_CmdSrc = cmdSrc; // need ID of control in MFC dialog and callback function m_CmdSrc.AddCommandHandler(32771, new CommandHandler (singleMenuHandler)); } private void singleMenuHandler (uint cmdUI) { // User command handler code System.Windows.Forms.MessageBox.Show("Custom menu option was clicked."); }
방법: 사용자 컨트롤 및 호스트 MDI 뷰 만들기에서 만든 MFC 애플리케이션을 엽니다.
를 호출할 메뉴 옵션을 추가합니다
singleMenuHandler
.리소스 뷰(Ctrl+Shift+E)로 이동하여 메뉴 폴더를 확장한 다음 IDR_MFC02TYPE 두 번 클릭합니다. 그러면 메뉴 편집기가 표시됩니다.
보기 메뉴 아래쪽에 메뉴 옵션을 추가합니다. 속성 창에서 메뉴 옵션의 ID를 확인합니다. 파일을 저장합니다.
솔루션 탐색기 Resource.h 파일을 열고 방금 추가한 메뉴 옵션의 ID 값을 복사한 다음, 해당 값을 C# 프로젝트 메서드의
Initialize
호출에 첫 번째 매개 변수m_CmdSrc.AddCommandHandler
로 붙여넣습니다(필요한 경우 대체32771
).프로젝트를 빌드하고 실행합니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다.
추가한 메뉴 옵션을 선택합니다. .dll의 메서드가 호출됩니다.
참고 항목
Windows Forms 사용자 정의 컨트롤을 MFC 뷰로 호스팅
ICommandSource 인터페이스
ICommandTarget 인터페이스