Практическое руководство. Создание пользовательского элемента управления и ведущего приложения в диалоговом окне
Обновлен: Ноябрь 2007
При выполнении приведенной в этом разделе процедуры подразумевается создание нового проекта MFC, в котором используются диалоговые окна (CDialog Class). Также допускается реализация поддержки элементов управления формы Windows Forms в существующих диалоговых окнах MFC.
Создание пользовательского элемента управления .NET
Создайте новый проект библиотеки элементов управления Windows Visual C# с именем WindowsControlLibrary1.
В меню Файл, выберите команду Создать и затем пункт Проект. В папке 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. Измените значение параметра "Решение" на Добавить в решение. Нажмите кнопку OК. Открывается мастер приложений MFC.
В мастере приложений MFC выберите пункт "Тип приложения". Выберите тип На базе диалогового окна. Примите остальные значения параметров по умолчанию и нажмите кнопку Готово. Создается приложение MFC с диалоговым окном MFC.
В диалоговое окно MFC добавьте прототип элемента управления.
Выберите вкладку Ресурсы. На вкладке "Ресурсы" дважды щелкните объект IDD_MFC01_DIALOG. В редакторе ресурсов отображается ресурс диалогового окна.
На панели элементов откройте список Редактор диалоговых окон. Перетащите элемент управления "Static Text" в ресурс диалогового окна. Элемент управления "Static Text" используется в качестве прототипа для элемента управления Windows Forms в .NET. Измените размер этого элемента в соответствии с размером элемента управления Windows Forms.
В окне Свойства измените идентификатор элемента управления "Static Text" на IDC_CTRL1. Для свойства TabStop установите значение True.
Настройте конфигурацию проекта.
В обозревателе решений щелкните правой кнопкой мыши узел проекта MFC01 и выберите пункт Свойства в контекстном меню. Открывается диалоговое окно Страницы свойств.
В диалоговом окне Страницы свойств в дереве Свойства конфигурации выберите пункт Общие, затем в разделе Значения по умолчанию для проекта установите для параметра Поддержка общеязыковой среды выполения (CLR) значение Поддержка CLR-среды (/clr). Нажмите кнопку OК.
Добавьте ссылку на элемент управления .NET.
В обозревателе решений щелкните правой кнопкой мыши узел проекта MFC01 и выберите пункт Ссылки. В окне Страница свойств выберите пункт Добавить новую ссылку, выберите проект WindowsControlLibrary1 (на вкладке Проекты) и нажмите кнопку ОК. В результате этого добавляется ссылка в форме параметра компилятора /FU, что позволяет скомпилировать программу. Также в каталог проекта MFC01 копируется файл WindowsControlLibrary1.dll, что позволяет выполнять программу.
Найдите следующую строку в файле 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 в переопределении метода диалогового окна CMFC01Dlg::DoDataExchange, созданном с помощью мастера приложений MFC (в отличие от метода CAboutDlg::DoDataExchange, который располагается в этом же файле), добавьте следующий код создания управляемого элемента управления и свяжите его с прототипом статического элемента управления IDC_CTRL1:
void CMFC01Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1); }
Выполните построение и запуск проекта.
В обозревателе решений щелкните правой кнопкой мыши проект MFC01 и выберите пункт Назначить запускаемым проектом.
В меню Построение выберите команду Построить решение.
В меню Отладка выберите пункт Запуск без отладки. Открывается диалоговое окно MFC, в котором отображается элемент управления Windows Forms.
См. также
Другие ресурсы
Размещение пользовательского элемента управления формы Windows Forms в диалоговом окне MFC