我有一个关于在我的表单应用程序中使用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?