我有一個關於在我的表單應用程序中使用WndProc
的基本問題。我想知道當我有表單事件可用時,WndProc
方法的用法。在哪些情況下,我是否需要創建自定義消息? MSDN表示它僅用於處理Windows消息。當我有表單事件時,爲什麼我應該使用WndProc?
5
A
回答
4
WndProc是WinForms如何提供圍繞Win32窗口消息的包裝,使用更易於使用和理解.NET層。
通常它的工作原理如下。以WM_LBUTTONDOWN窗口消息的示例爲例。 Windows.Forms.Control.WndProc將攔截此消息並從消息的WPARAM和LPARAM中提取相關信息。然後它調用受保護的虛擬方法OnMouseDown,將相關信息很好地打包成一個MouseEventArgs。然後,實現將在其自身處理結束時觸發MouseDown事件。
因此,處理一組OnXXXX方法/ XXXX事件要比直接攔截Windows消息容易得多。
但是,如果您感興趣的Windows消息不是由WinForms處理?在這種情況下,您可以重寫WndProc並直接處理它。另一個用途是攔截一條消息,然後在控制本身有機會處理消息之前丟棄它。或者您可以創建自定義消息以在應用程序內的控件之間發送。當您希望查看控件收到的每條消息時,它們對於調試也很有用,您只需在一處添加日誌記錄。
2
.NET是Win32的一個包裝。它不公開100%的Windows中所有方法,事件和屬性。
所以有時你需要在封面下。
然而,它不是你要找的東西 - 當你的問題需要它時,一個好的'堆棧交換搜索通常會讓你知道。
相關問題
- 1. 我應該使用什麼asp.net事件?
- 2. 我們應該什麼時候在C#中使用事件
- 3. 當我不應該使用表格時
- 4. 我什麼時候應該使用javax.swing.SwingUtilities.invokeLater()?
- 5. 我什麼時候應該使用UITableViewCellSeparatorStyleSingleLineEtched?
- 6. 我應該使用什麼鍵爲HashMap?
- 7. (爲什麼)我應該使用混淆?
- 8. 爲什麼我應該使用@properties?
- 9. 爲什麼我不應該使用Unity?
- 10. 當我使用Bundler時,爲什麼我應該關心RVM的Gemset功能?
- 11. 爲未來事件使用矩時區,我應該保存什麼?
- 12. 當我應該使用I2C和什麼時候應該使用SPI?
- 13. 爲什麼我的表單沒有按照它應該更新?
- 14. 什麼時候應該在我的查詢中使用事務?
- 15. 當使用GetUserAvailabilityRequest查詢FreeBusy狀態時,我應該爲AttendeeType使用什麼?
- 16. 當我使用json.loads時,你有什麼?
- 17. 爲什麼我應該使用vagrant如果我使用virtualenv?
- 18. 爲什麼我應該使用主ID作爲關聯表
- 19. 爲什麼當我的表單標籤
- 20. 什麼時候我們應該在css中使用rem單位?
- 21. 爲什麼我應該在excel中使用application.run的單引號?
- 22. 爲什麼我應該在沒有代碼時調用超級
- 23. 我應該使用什麼事件來隱藏jQuery中的上下文菜單?
- 24. 當我有一個HTTPException時,我的JSON響應應該包含什麼?
- 25. 我應該爲什麼JEditorPane事件創建偵聽器?
- 26. 爲什麼我應該解除Javascript事件?
- 27. 什麼時候我不應該使用正則表達式?
- 28. 我有什麼用爲表
- 29. 何時/爲什麼我不應該在DataContracts上使用IsReference = true?
- 30. 爲什麼我們不應該同時使用jspViewResolver和TilesViewResolver?