Как обнаружить, если мышь в целой форме и дочерних элементах управления?

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

Вещи для поиска - Digital Signage, это своего рода отраслевое слово.

После GreenScreen Chromecast работает нормально. Greenscreen

хост-решение - это Sign Simple , которое похоже на тот же подход, что и Greenscreen, без необходимости размещения веб-страницы получателя.

Подобные решения с использованием Raspberry Pi можно найти.

Примечательно: с GreenScreen и CastHelloText я не смог получить 1080p только 720p, в некоторых комментариях упоминается видео только в 1080p, но в изображениях 720p, что я также понимаю как html-страницы.

7
задан Alex Jolig 27 December 2015 в 09:14
поделиться

2 ответа

Вы можете подключить основной цикл сообщений и предварительно / постобработать любое сообщение (WM_MOUSEMOVE), какое захотите.

public class Form1 : Form {
    private MouseMoveMessageFilter mouseMessageFilter;
    protected override void OnLoad( EventArgs e ) {
        base.OnLoad( e );

        this.mouseMessageFilter = new MouseMoveMessageFilter();
        this.mouseMessageFilter.TargetForm = this;
        Application.AddMessageFilter( this.mouseMessageFilter );
    }

    protected override void OnClosed( EventArgs e ) {
        base.OnClosed( e );

        Application.RemoveMessageFilter( this.mouseMessageFilter );
    }

    class MouseMoveMessageFilter : IMessageFilter {
        public Form TargetForm { get; set; }

        public bool PreFilterMessage( ref Message m ) {
            int numMsg = m.Msg;
            if ( numMsg == 0x0200 /*WM_MOUSEMOVE*/) {
                this.TargetForm.Text = string.Format( "X:{0}, Y:{1}", Control.MousePosition.X, Control.MousePosition.Y );
            }

            return false;
        }

    }
}
13
ответ дан 6 December 2019 в 14:09
поделиться

Как насчет этого: в OnLoad вашей формы рекурсивно пройдитесь по всем дочерним элементам управления (и их дочерним элементам) и подключите событие MouseEnter.

Затем всякий раз, когда мышь входит в любого потомка, будет вызван обработчик события. Точно так же вы можете подключить события MouseMove и / или MouseLeave.

protected override void OnLoad()
{
   HookupMouseEnterEvents(this);
}

private void HookupMouseEnterEvents(Control control)
{
   foreach (Control childControl in control.Controls)
   {
      childControl.MouseEnter += new MouseEventHandler(mouseEnter);

      // Recurse on this child to get all of its descendents.
      HookupMouseEnterEvents(childControl);
   }
}
2
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: