我有一個關於在我的表單應用程序中使用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. 當我們有Specflow時,爲什麼我們應該使用編碼的UI?
- 3. 我們應該什麼時候在C#中使用事件
- 4. Backbone:我應該聽什麼事件
- 5. 當我不應該使用表格時
- 6. 當我爲Android編程時,我應該問什麼設計師?
- 7. 我應該使用什麼事件來在jQuery中異步提交表單?
- 8. 爲什麼/我應該在什麼時候使用dojo模塊?
- 9. 我什麼時候應該使用javax.swing.SwingUtilities.invokeLater()?
- 10. 我什麼時候應該使用UITableViewCellSeparatorStyleSingleLineEtched?
- 11. 爲什麼我應該使用@properties?
- 12. 我應該爲git user.name使用什麼?
- 13. 我應該使用什麼鍵爲HashMap?
- 14. 爲什麼我不應該使用Unity?
- 15. 爲什麼我不應該使用atoi()?
- 16. (爲什麼)我應該使用混淆?
- 17. 爲什麼我應該使用org.gradle.api.tasks.Exec?
- 18. 當我使用Bundler時,爲什麼我應該關心RVM的Gemset功能?
- 19. 當我應該使用I2C和什麼時候應該使用SPI?
- 20. 爲未來事件使用矩時區,我應該保存什麼?
- 21. 爲什麼我們應該使用臨時對象來提高事件?
- 22. 爲什麼我的表單沒有按照它應該更新?
- 23. 當只有一個實現類時,爲什麼我應該使用接口?
- 24. 什麼時候應該在我的查詢中使用事務?
- 25. 當我syncdb時應該使用什麼密碼?
- 26. 當使用GetUserAvailabilityRequest查詢FreeBusy狀態時,我應該爲AttendeeType使用什麼?
- 27. angularjs:呈現模板後我應該使用什麼事件?
- 28. 爲什麼/當我應該使用骨幹關係框架
- 29. 爲什麼我應該使用vagrant如果我使用virtualenv?
- 30. 當我單擊ListView的ImageButton時,爲什麼不啓動我的回發事件?