2015-11-06 25 views
0

我最近一直在研究遊戲開發,並且獲得了Microsofts XNA4.0(分別爲Monogame)。不幸的是,XNA並沒有真正的用戶界面工具箱,所以我開始自己寫一個(我知道那裏有很多第三方工具包,但爲了教育目的,我決定重新開發這個工具包)。在UI中處理設備輸入和焦點

我的問題是:UI框架如何管理和編排設備輸入,尤其是關注焦點?比方說,我已經對這些國家是使用一個簡單的循環輪詢的物理鍵盤事件驅動的抽象:

public interface IKeyboard { 
    event EventHandler<Keys> KeyPressed; 
    void Update(); 
} 

能夠處理關鍵筆劃每個控件需要訪問該提供商所以它會在收到通知發生'KeyPressed'事件。問題是:當我在屏幕上有10個文本框並且每個人都在監聽輸入時,在一個關鍵筆劃中,每個文本框都會寫入輸入,即使它不在焦點上。

可能的解決方案將是:

  • 在每個控制管理焦點狀態和僅處理在目前被聚焦

或控制...

  • 處理的輸入來自集中管理員的輸入並僅將其發送給集中控制

現有的UI工具包如WPF或Winforms如何做到這一點?那裏的個別控制似乎是如此的分離,但每個控制都必須意識到目前關注的控制。

回答

0

在我的解決方案中,我有基於UIControl和Interfce IFocusable的控件,UIPanel和UIForm類UIControl。如果控制是IFocusable,它可以有輸入焦點。如果控制是面板,它可以爲他的子控件管理焦點。您可以在同一時間擁有一個活動表單或更新少數表單,但在每個表單中只有一個重點控制。如果這個控件是元素容器,它也只有一個焦點控件。當用戶持有密鑰時,只有集中控制權(永遠是否有)才能得到通知。

我不想刪除部分代碼。如果你願意,你可以看到整個sources