C # Передача сообщений WndProc из формы в другую форму - PullRequest
0 голосов
/ 19 мая 2010

Я работаю над приложением C # с двумя формами Windows. Обе формы являются полноэкранными, и одна форма располагается поверх другой формы в виде прозрачного наложения. Нижняя форма содержит веб-браузер (также полный экран). Я отслеживаю сенсорный ввод на прозрачной оверлейной форме, чтобы фиксировать жесты и рисовать кнопки и другие элементы управления на экране. Что мне нужно сделать, это отправить все сообщения Windows, которые оверлейная форма получает в своей функции WndProc, в приведенную ниже форму (или элемент управления веб-браузера в форме, поскольку это в основном вся нижняя форма, используемая для хранения).

По сути, мне просто нужно разобраться с жестами наложения, все сообщения мыши все еще нужно передавать в веб-браузер для обеспечения определенной функциональности.

Я попробовал наивный метод, просто вызвав метод WndProc нижней формы, учитывая сообщение из оверлея. (И аналогичным образом я попытался передать его дальше в WndProc окна управления браузером). Ни один из этих методов не работает. Я также попытался просто поменять параметр HWnd объекта Message на дескриптор нижней формы / браузера, пытаясь это сделать, и это тоже не сработало.

Итак, кто-нибудь сможет придумать, какие еще методы можно попробовать, или, возможно, правильный способ передачи сообщений Windows между формами?

Спасибо, Alex

Ответы [ 2 ]

0 голосов
/ 19 мая 2010
var topForm = new Form1(); // top form
var browserForm = new Form2(); // bottom form with webbrowser control

добавить событие MouseClick в Form1

private void Form1_MouseClick(object sender, MouseEventArgs e)
{
     browserForm.DoClick(e.X, e.Y);
}

создание пользовательского элемента управления WebBrowserEx для обработки событий щелчка мыши и добавьте этот элемент управления в Form2

namespace WindowsFormsApplication1
{
    public class WebBrowserEx: System.Windows.Forms.WebBrowser
    {
        public void DoClick(int x, int y)
        {
            base.OnMouseClick(new MouseEventArgs(MouseButtons.Left, 1, x, y, 0));
        }
    }
}
0 голосов
/ 19 мая 2010

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

...