Общие сведения о Windows Forms и неуправляемых приложениях
Обновлен: Ноябрь 2007
Приложения и элементы управления Windows Forms могут взаимодействовать с неуправляемыми приложениями при соблюдении некоторых предосторожностей. В следующих разделах описываются сценарии и конфигурации, которые поддерживаются и не поддерживаются элементами управления и приложениями Windows Forms.
Элементы управления Windows Forms и приложения ActiveX
За исключением Microsoft Internet Explorer и Microsoft Foundation Classes (MFC), элементы управления Windows Forms не поддерживаются в приложениях, предназначенных для размещения элементов управления ActiveX. Другие приложения и средства разработки, способные размещать элементы управления ActiveX, включая контейнеры для тестирования ActiveX из версий Visual Studio, предшествующих Visual Studio .NET 2003, не поддерживают размещение элементов управления Windows Forms.
Эти ограничения также применимы к использованию элементов управления Windows Forms посредством COM-взаимодействия. Использование элемента управления Windows Forms посредством вызываемой оболочки COM (CCW) поддерживается только в Internet Explorer. Дополнительные сведения о COM-взаимодействии см. в разделах
COM-взаимодействие и Расширенное COM-взаимодействие.
В следующей таблице показаны доступные средства размещения ActiveX для элементов управления Windows Forms.
Версия Windows Forms |
Поддержка |
---|---|
..NET Framework версии 1.0 |
Internet Explorer 5.01 и более поздние версии |
..NET Framework версии 1.1 и более поздних версий |
Internet Explorer 5.01 и более поздние версии Microsoft Foundation Classes (MFC) версии 7.0 и более поздних версий |
Размещение компонентов Windows Forms как элементов управления ActiveX
В .NET Framework 1.1 поддержка была расширена для включения MFC 7.0 и более поздних версий. Эта поддержка включает в себя любой контейнер, полностью совместимый с MFC 7.0 или с более поздней версией контейнера элементов управления ActiveX.
Однако регистрация элементов управления Windows Forms как элементов управления ActiveX не поддерживается. Кроме того, вызов метода com.ms.win32.Ole32.CoCreateInstance для элементов управления Windows Forms не поддерживается. Поддерживается только управляемая активация элементов управления Windows Forms. После создания элемента управления Windows Forms можно размещать его в приложениях MFC так же, как и элементы управления ActiveX.
Чтобы использовать элементы управления Windows Forms в неуправляемых приложениях необходимо либо разместить среду CLR с помощью неуправляемого API размещения среды CLR, либо использовать возможности взаимодействия C++. Использование возможностей взаимодействия C++ является рекомендуемым решением.
Windows Forms в клиентских приложениях COM
При открытии формы Windows Forms из клиентских приложений COM, таких как приложения Visual Basic 6.0 или приложение MFC, форма может вести себя не так, как ожидается. Например, при нажатии клавиши TAB фокус не переходит от одного элемента управления к другому. При нажатии клавиши ВВОД, если фокус установлен на кнопке, событие кнопки Click не возникает. Также может наблюдаться и другое неожиданное поведение при нажатии клавиш или действиях мышью.
Это происходит из-за того, что неуправляемое приложение не реализует поддержку цикла обработки сообщений, которая необходима для правильной работы формы Windows Forms. Цикл обработки сообщений, реализуемый в клиентском приложении COM, существенно отличается от цикла обработки сообщений Windows Forms.
Цикл обработки сообщений приложения является внутренним циклом программы, который получает сообщения из очереди сообщений потока, преобразует их и отправляет приложению для обработки. Архитектура цикла обработки сообщений для формы Windows Forms отличается от архитектуры, используемой в более ранних приложениях, таких как приложения Visual Basic 6.0 и приложения MFC. Сообщения окна, которые отправляются в цикл сообщений, могут обрабатываться не так, как ожидает форма Windows Forms. Таким образом, может наблюдаться неожиданное поведение. Могут не работать некоторые сочетания клавиш и некоторые действия мыши, а также могут не возникать некоторые события.
Устранение проблем взаимодействия
Эти проблемы можно устранить путем отображения формы в цикле обработки сообщений .NET Framework, который создается посредством метода Application.Run.
Чтобы исправить работу формы Windows Forms из клиентского приложения COM, необходимо запустить его в цикле обработки сообщений Windows Forms. Для этого воспользуйтесь одним из перечисленных ниже подходов.
Используйте метод Form.ShowDialog для отображения формы Windows Form. Дополнительные сведения см. в разделе Практическое руководство. Поддержка COM-взаимодействия путем отображения формы Windows Forms с помощью метода ShowDialog.
Запускайте каждую форму Windows Forms в новом потоке. Дополнительные сведения см. в разделе Практическое руководство. Поддержка COM-взаимодействия путем отображения каждой формы Windows Forms в отдельном потоке.
Создайте общий цикл обработки сообщений в новом потоке компонента .NET Framework. Дополнительные сведения см. в разделе Практическое руководство. Поддержка COM-взаимодействия путем отображения Windows Forms в общем потоке.
См. также
Задачи
Основные понятия
Предоставление COM-клиентам доступа к компонентам .NET Framework
Упаковка сборки для модели COM
Ссылки
Программа импорта элементов ActiveX форм Windows (Aximp.exe)
Другие ресурсы
Windows Forms и неуправляемые приложения
Расширенное COM-взаимодействие