none
接收多點觸控事件? RRS feed

  • 問題

  • 環境win7+vs2010
     
    想請問在System.Windows.Input.Touch這個類別中,MSDN中它的解說是
     
    提供應用程式層級的服務,這個服務會處理作業系統的多點觸控輸入,以及引發 FrameReported 事件。

    我實作後,觸控確實可以接收到觸控的事件,但只限於我的WPF應用程式視窗中,
    但我想要的是可接收到全域的多點觸控事件,不知是否有方法可做?
     
    所謂全域就是指,除了自己的那個WPF視窗外,在WIN7上做的多點觸控事件,我的應用程式也接的到。

    感謝。

    • 已編輯 小貓貓 2012年3月1日 上午 02:42
    2012年3月1日 上午 02:40

解答

所有回覆

  • 2012年3月1日 上午 05:19
    版主
  • dear 小歐大:

                    感謝您找的資料,但有地方看不太懂,想請問您一下,您給的這篇中

             http://johnniebooks.blogspot.com/2009/09/wpf-windows7-multi-touch.html

           在接msg的部份,它是都這樣寫

                switch (msg)
                {
                      case TouchMessage.WM_GESTURE:........

            我看了很多相關的程式在google,也都是這樣寫,但這裡接到的msg是int

                      要如何知道多點觸控事件的int代表多少??

    2012年3月1日 上午 10:51
  • 觸控的Message 

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 小貓貓 2012年3月2日 上午 01:10
    • 已取消標示為解答 小貓貓 2012年3月2日 上午 03:05
    2012年3月1日 上午 11:27
  • dear各位大大:

       感謝你們的幫忙

       以下是我實作測試的程式,但發現結果並不是我想要的,以下的程式,它仍只抓的到該視窗上發生的事件,我想做到的是,

       如我第一篇發問的,是全域的事件我都可以接收,我仔細描述一下,比如我的wpf視窗上有個textBlock,我想做的是我開啟小畫家,

       在小畫家上同時多點觸控畫畫,然後我的WPF應用程式可以接到該事件,然後改變我textBlock的值,

       我上面舉小畫家是舉例,我想做的是只要發生多點觸控事件,我的應用程式都可以接的到,想請問這該如何做到???謝謝

     
    namespace multitouch
    {
        /// <summary>
        /// MainWindow.xaml 的互動邏輯
        /// </summary>
        public partial class MainWindow : Window
        {
           
            public MainWindow()
            {
                InitializeComponent();
                this.SourceInitialized += new EventHandler(MainWindow_SourceInitialized);
            }
    
            void MainWindow_SourceInitialized(object sender, EventArgs e)
            {
                IntPtr hwnd = new WindowInteropHelper(this).Handle;
                HwndSource.FromHwnd(hwnd).AddHook(new HwndSourceHook(WndProc));
            }
    
            public const int WM_GESTURE = 0x0119;
    
            IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {
                switch (msg)
                {
                    //WM_TOUCH 
                    case 0x0240:
                        this.textBlock1.Text = "WM_TOUCH";
                        handled = true;
                        break;
                    //WM_GESTURE
                    case WM_GESTURE:
                        this.textBlock1.Text = "WM_GESTURE";
                        handled = true;
                        break;
                    //WM_MOUSEMOVE 
                    case 0x0200:
                        this.textBlock1.Text = "WM_MOUSEMOVE ";
                        handled = true;
                        break;
                }
                return IntPtr.Zero;
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
    
            }
        }
    }

    2012年3月2日 上午 01:18
  • 參考 此paper中 global hooks 一節的說明


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年3月2日 上午 03:21