2010-07-16 102 views
0

我的問題是:我有一個應用程序內的狀態機,我需要能夠暫停當前狀態的ProcessInput功能,只要用戶沿屏幕移動窗體。窗體在Windows窗體中移動事件

我有一個屬性叫做「暫停」狀態,並且我重寫了窗體的OnMove事件,以便在事件觸發時將該屬性設置爲true。

當用戶不再移動表單時,如何恢復狀態的ProcessInput函數? (更具體地說,我正在尋找一個事件,把「state.Paused = false」放在其中)

Thx提前爲您提供幫助!

回答

1

不確定是否有可以偵聽的特定事件,但如何使用某種基於計時器的解決方法?

創建一個定時器,復位和啓用定時器每一個舉動事件發生的時間。一旦計時器實際觸發(在設定的持續時間內未復位),然後設置state.Paused = false。

可能有點rudimentry,但它應該工作...

+0

是的,這可能是一個解決方案。感謝您的輸入! – cantrem 2010-07-16 09:46:42

1

你需要WM_MOVE消息,它是當移動完成發送。我不記得WinForms中是否有處理程序(事件),但最糟糕的情況是,您可以覆蓋窗口的WndProc並手動處理消息 - 以「老派」C風格。

+0

我搜索,我找不到任何處理程序。我想我將不得不進一步挖掘,以瞭解如何使用WM_MOVE進行操作。謝謝,這似乎是我需要的。 – cantrem 2010-07-16 09:45:57

+0

.NET缺少一些Win32 API的功能,但它真的很容易添加的功能:你可以找到C++頭與WM_MOVE常數和覆蓋窗口(形式)類的WndProc來處理此消息。 – Gobra 2010-07-16 14:04:00