向現有 WinForms 應用程序添加 Windows 8 觸摸支持
我有一個面向 .NET Framework 4 的現有 Windows 窗體桌面應用程序,並希望向其添加 Windows 8 觸摸支持。
目前該程序在 Windows 8 中執行良好,我可以調整一些元素的大小,使其在觸摸設備上更加使用者友好。但是,在數據網格上添加手勢(例如捏合縮放)以及對其他元素的滑動支持將大大有助於使應用程序在純觸摸環境中更加現代。
我正在投資 Visual Studio 2012,它可以讓我瞄準 .NET 4.5 和新的 Windows 8 功能,但是有人知道任何可以幫助我更新應用程序的資源嗎?我特別關心以下幾點:
- 無法在我的非觸控開發機器上直接測試應用程序的觸控功能。微軟的模擬器似乎只支持 Metro 應用程序。我聽說諸如 Splashtop 之類的平板電腦應用程序可以提供幫助(我有一個 Android 平板電腦),但還沒有看到任何具體的具體情況
- WinForms 應用程序是否支持手勢。我是否必須將整個 UI 升級到 WPF 才能使其正常工作?(如果我真的走這條路,我相信我也可以針對 Windows 7,因為 WPF 4 支持多點觸控)
- 在執行時檢測設備的觸控支持並適當地縮放/更改 UI,類似於 Microsoft 的 Windows RT Office 應用程序上的觸控模式設置。我不想為了添加新功能而分叉項目
- 觸摸互動的自動化測試
無論如何,這並不是一份詳盡的清單,但我非常感謝那些過去可能進行過類似升級的人的任何建議。
在執行時檢測設備的觸摸支持是有問題的,因為使用者可以隨時連接觸摸設備。如果您在檢測到觸摸設備連接後調整表單大小並且設備的連接不穩定,您最終可能會得到一個不斷調整自身大小的表單。最好為所有輸入提供一個穩定的界面(例如,使用功能區而不是小菜單欄)。如果你真的想檢測觸摸設備,你可以用 SM_DIGITIZER 呼叫 GetSystemMetrics。
Windows 窗體不支持手勢(2005 年凍結的功能)。然而,表單控制項仍然可以使用觸摸輸入,因為預設的觸摸處理程序會將觸摸轉換為滑鼠點擊。如果您想擁有自己的觸摸處理程序,因為觸摸輸入以 Windows 消息的形式發送,您可以覆蓋您的表單或控制項的WndProc函式來處理手勢消息。有關範常式式碼,請查看Windows 7 SDK 中的Windows Touch Samples。
要為您的觸摸功能編寫測試程式碼,您可以呼叫 InjectTouchInput 來模擬觸摸輸入。完整的範例可以在Input: Touch injection sample中找到。