0

當窗口最小化時,我想要一個事件處理程序。我正在閱讀不同的帖子在stackoverflow,但沒有找到一個完整的解決方案。我的實際問題是described here獲取DefWindowProc函數的句柄

與提問here類似,我想在C#中使用DefWindowProc。所以我可以檢查消息是否是WM_ACTIVATEAPP,如果應用程序被激活/取消激活,我想做一些業務邏輯。

This answer是somwwhat很有幫助,但沒有完全解釋 - 就像我將如何檢查我的應用程序中的消息。我需要覆蓋DefWindowProc嗎?

任何指針都會有幫助。

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+1

此頁面列出的代碼允許您鉤住控件的窗口過程,也可以將它應用於窗體:http://mrpfister.com/programming/subclassing-net-compact-framework-controls/ – pasztorpisti

回答

1

什麼檢查的形式變化的事件:

一個簡單的測試形式由(X)「最小化」點擊,並使用重新啓動任務管理器:

Load Form: 
635291025619140000: Got Form1_Resize() 
635291025619950000: Got Form1_Resize() 
635291025620060000: Got Form1_Resize() 
635291025620300000: Got Form1_Resize() 
635291025620470000: Got Form1_Activated() 
635291025620880000: Got Form1_GotFocus() 

Click on (X) to minimize: 
635291026059340000: Got Form1_Resize() 
635291026059780000: Got Form1_Deactivate() 
635291026059950000: Got Form1_LostFocus() 

TaskManager SwitchTo: 
635291026483820000: Got Form1_Resize() 
635291026483910000: Got Form1_Activated() 
635291026484010000: Got Form1_GotFocus() 

Press Win-Symbol of Form (shows Start screen): 
635291026724060000: Got Form1_Deactivate() 
635291026724960000: Got Form1_LostFocus() 

Click (X) in Start screen: 
635291027163520000: Got Form1_Resize() 
635291027163610000: Got Form1_Activated() 
635291027163710000: Got Form1_GotFocus() 

Click (X) of Form: 
635291027673050000: Got Form1_Resize() 
635291027673470000: Got Form1_Deactivate() 
635291027673660000: Got Form1_LostFocus() 

Re-Launched externally: 
635291028243720000: Got Form1_Resize() 
635291028243900000: Got Form1_Activated() 
635291028244010000: Got Form1_GotFocus() 

你看你總是得到取消激活+ LostFocus或激活+ GotFocus。你可以使用Deactivated + LostFocus捕捉窗體將被最小化/隱藏。 這是你在找什麼?

+0

測試過了嗎?應用程序包括窗體上的控件?我似乎記得,除非無法控制表單,否則表單不會獲得焦點活動? – tcarvin

+0

對,表單是空的。如果不爲空,則默認或上次使用的元素將獲得焦點消息。 – josef