Guru16 Ответов: 0

Processcmdkey не вызывается в окне winforms, вызываемом из приложения C++


У нас есть библиотека DLL C#, которая вызывается из приложения C++. Окно c# Winform находится поверх главного окна C++. Заметил, что мы не можем захватить метод ProcessCmdKey. Есть идеи, почему мы не можем вызвать это?

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)


Что я уже пробовал:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

Richard MacCutchan

Вам нужно предоставить больше информации. Где находится этот метод и как он соотносится с другими окнами?

Guru16

Метод находится в Winform (Form1.cs). Приложение C++ вызывает метод в c# Application. cs, который, в свою очередь, показывает нашу Winform.

0x01AA

Может быть, проблема с KeyPreview?
Форма.KeyPreview-Eigenschaft (Системы.Окна.Формы)[^]

Guru16

Он установлен на true.

0x01AA

Вы написали: "окно c# Winform находится поверх главного окна C++", что именно это означает? Установлен ли родительский элемент окна c# в основное окно C++?

Guru16

У нас есть главное окно C++. Из C++ мы вызываем метод в классе C#. затем мы показываем форму C#, которая на самом деле находится поверх этого окна C++ в виде модального диалога.

Dave Kreskowiak

Как именно создается экземпляр окна C# и показывается пользователю?

Я подозреваю, что это потому, что окно C# не подключено к насосу сообщений в Родительском коде C++.

Guru16

Компонент C++ вызывает метод в классе C#..затем в c# мы делаем форму.Показать и показать наше окно C#.

Dave Kreskowiak

Ладно, я больше искал код на стороне C++. Это приложение MFC, CLI,???

Доступна ли библиотека C# через COM?

Guru16

приложение MFC. И да, библиотека C# является COM-экспонированной.

Dave Kreskowiak

Ладно, обычно ты не показываешь форму. Обычно вы создаете UserControl или что-то подобное (все еще экспонируемое через COM) и добавляете этот элемент управления в диалоговое окно MFC. Маршрутизация сообщений проходит через обычный код C++ вместо того, чтобы полагаться на то, что вы сами подключите его к форме C#, что-то вроде этот[^].

Вместо формы.Шоу, вы, возможно, захотите, чтобы попробовать приложение.Вместо того, чтобы работать. Я никогда не видел, как используется форма, но видел, как используются элементы управления.

0 Ответов