在 WPF 中能夠經過 StylusPlugIn 的方式快速從觸摸線程拿到觸摸數據,而 WinForms 沒有這個機制,可是能夠經過 Microsoft.Ink 組件和 WPF 相同在 RealTimeStylus 服務拿到觸摸點html
本文的例子放在微軟的官方例子裏面,請看 GitHub 代碼git
本文不會告訴你們代碼如何寫,由於看微軟的代碼就知道了,本文主要告訴你們爲何這樣作的觸摸收集足夠快github
在 Windows 裏面,會經過 WM_TOUCH
的消息發送觸摸的信息,可是經過消息的方式不夠快。固然這句話不是說消息不快,而是和 Wisptis 服務對比仍是不夠快windows
從微軟的筆和觸摸服務裏面獲取的方法是須要使用複雜的方法才能獲取到內容,大概的獲取方法就是從共享內存裏面讀取值,此時的讀取速度將比消息快app
在 csproj 裏面引用 Microsoft.Ink 組件,將能夠獲取 RealTimeStylus 的封裝方法,不須要寫一個 PenImc 的組件。可是經過這個方法將拿到十分底層的內容,須要小夥伴本身處理post
<Reference Include="Microsoft.ink, Version=6.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> <SpecificVersion>True</SpecificVersion> </Reference>
我推薦下載微軟的代碼,而後構建,嘗試運行,而後對比一下性能。這個方法能拿到最快的觸摸信息,可是這個方法優化的僅是觸摸收集,而對渲染沒有作多少優化性能
更多請看微軟文檔 Windows Touch Scratchpad using the Real-Time Stylus Sample (C#) - Win32 apps優化
在 WPF 中默認的 StylusPlugIn 就使用了這部分優化,不須要額外的引用組件,如何在 WPF 中作高性能筆請看 WPF 高性能筆線程
本文會常常更新,請閱讀原文: https://blog.lindexi.com/post/WinForms-%E4%B8%8B%E7%9A%84%E9%AB%98%E6%80%A7%E8%83%BD%E7%AC%94%E8%BF%B9%E6%96%B9%E6%B3%95.html ,以免陳舊錯誤知識的誤導,同時有更好的閱讀體驗code