none
멀티터치로 Winform안에 여러개의 webbrowser가 터치된 영역에 맞게 동시 동작 방법? RRS feed

  • 질문

  • 안녕하세요..

    C#초짜 입니다.

    멀티터치로 각 각의 터치 구간에 Webbrowser가 동시에 동작가능한 방법이 궁금합니다.

    자료를 찾아보면 webbrowser가 멀티 터치를 지원하지 않기 때문에 Firefox기반의 geckowebbrowser를 사용하라는 애기도 있어서 

    해봤지만, 동작이 되지 않네요.

    각각의 Webbrowser로 구글맵을 실행하고 멀티 터치를 하면 한개의 Brower만 터치가 점유되서 한개의 Browser에서만 동작되네요..

       

    =========================================================================

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Windows7.Multitouch.WinForms;

    using Gecko;                             // <-- gecko webbrower를 위해서
    using Gecko.Windows;

    namespace TouchDataVisualization
    {
        public partial class frmTouchVisualizer : Form
        {
            private readonly Windows7.Multitouch.TouchHandler _touchHandler;

            Dictionary<int, TouchData> controls;


            public frmTouchVisualizer()
            {
                InitializeComponent();
                InitBrowser();

                controls = new Dictionary<int, TouchData>();

                _touchHandler = Factory.CreateHandler<Windows7.Multitouch.TouchHandler>(this);

                _touchHandler.TouchDown += OnTouchDownHandler;
                _touchHandler.TouchMove += OnTouchMoveHandler;
                _touchHandler.TouchUp += OnTouchUpHandler;
            }    

            private void OnTouchDownHandler(object sender, Windows7.Multitouch.TouchEventArgs e)
            {
                TouchData tdata = new TouchData();
                tdata.ShowTouchData(e);

                if (e.Location.Y < (tdata.Height + 25)) tdata.Location = new Point((e.Location.X - tdata.Width / 2), (e.Location.Y + 25));
                else tdata.Location = new Point((e.Location.X - tdata.Width / 2), (e.Location.Y - (tdata.Height + 25)));
                controls.Add(e.Id, tdata);
                this.Controls.Add(tdata);

                geckoWebBrowser1.Controls.Add(tdata);
                geckoWebBrowser2.Controls.Add(tdata);
                geckoWebBrowser3.Controls.Add(tdata);
                Invalidate();
            }

            private void OnTouchMoveHandler(object sender, Windows7.Multitouch.TouchEventArgs e)
            {
                TouchData tdata;
                if (controls.TryGetValue(e.Id, out tdata))
                {
                    if (e.Location.Y < (tdata.Height + 25)) tdata.Location = new Point((e.Location.X - tdata.Width / 2), (e.Location.Y + 25));
                    else tdata.Location = new Point((e.Location.X - tdata.Width / 2), (e.Location.Y - (tdata.Height + 25)));
                    tdata.ShowTouchData(e);

                    Invalidate();
                }
            }

            private void OnTouchUpHandler(object sender, Windows7.Multitouch.TouchEventArgs e)
            {
                TouchData control;
                if (controls.TryGetValue(e.Id, out control))
                {
                    this.Controls.Remove(control);
                    controls.Remove(e.Id);
                    geckoWebBrowser1.Controls.Remove(control);
                    geckoWebBrowser2.Controls.Remove(control);
                    geckoWebBrowser3.Controls.Remove(control);
                }
            }
            //private WebBrowser _browser = default(WebBrowser);
            public void InitBrowser()
            {
                if (Xpcom.IsInitialized)
                {
                    Xpcom.Initialize("Firefox64");
                }
                this.geckoWebBrowser1.Navigate("https://www.google.co.kr/maps/@45.2000678,17.2800773,5z?hl=ko");
              this.geckoWebBrowser2.Navigate("https://www.google.co.kr/maps/@45.2000678,17.2800773,5z?hl=ko");          

    this.geckoWebBrowser2.Navigate("https://www.google.co.kr/maps/@45.2000678,17.2800773,5z?hl=ko");      

            }

        }
    }

    ======================================================================

    여러개를 터치하였을때 한개의 webbrowser에서만 동작하네요..

    어떻게 동시에 가능하게 할 수 있을까요?


    • 편집됨 xfile2580 2019년 6월 26일 수요일 오전 3:23
    2019년 6월 26일 수요일 오전 2:28

모든 응답

  • Windows의 입력 방식은 현재 포커스를 받고 있는 것에 한해서만 적용됩니다. 그리고 그 포커스는 Window HANDLE을 가지고 있는 걸로 제한이 됩니다. 따라서, 그런 식으로 (Window HANDLE을 가진) Web Browser 컨트롤을 자식으로 추가했다면 하나의 웹 브라우저에만 터치 입력이 가는 것이 맞습니다. 다중 Window로 터치 입력을 분산시킬 수는 없습니다.
    2019년 6월 26일 수요일 오전 6:12