gpt4 book ai didi

c# - 你为什么要覆盖 wndproc

转载 作者:可可西里 更新时间:2023-11-01 09:06:12 26 4
gpt4 key购买 nike

我一直在四处寻找,并没有真正看到太多关于为什么有人会覆盖 wndproc 来处理消息的信息。

所以我想知道:

为什么要这样做?

什么时候做?

它在 C# 中的一般用途是什么?

当看到串行 COM 从计算机上插入和拔出时,我尝试使用它,但我觉得我更好地依赖自己创建的方法。

我看到的其他消息是关于按键、光标设置和其他各种操作的。这就是说这些东西中的大部分已经在 c# 库中内置了方法。所以我再次回到我的三个主要问题。任何信息、意见、示例等都很棒。

最佳答案

WndProc() 是 Windows 窗口工作方式的核心。它是围绕 窗口过程 的托管包装方法,该函数在过去曾用 C 语言编写。这是您自定义窗口行为的方式,使它对操作系统或其他程序生成的通知做出不同的响应。

您通常不需要覆盖它,基类中的 WndProc() 方法处理大部分基本通知。将它们变成友好的 .NET 事件,如 Click 等。但这还没有完成,要么是因为通知太模糊,要么是因为它无法了解自定义窗口使用的消息的任何信息。在这种情况下,您可以转而重写 WndProc() 来拦截消息。我能想到的最好的例子是创建一个无边界窗口来绘制自定义窗口框架并仍然使窗口正常运行。最简单的方法是拦截 WM_NCHITTEST 之类的消息,而不是被 .NET 包装。

真正理解 WndProc() 需要阅读 Petzold 的开创性书籍“Programming Windows”。今天可能不再那么容易掌握了,它确实假定您对 C 语言有基本的了解。这是 30 年前 winapi 的目标语言,当时面向对象的语言并未被广泛使用或可用。这也解释了为什么在 WndProc() 中编写代码相当痛苦,几乎没有抽象,您不能真正忽略指针。

从 Windows 8 和 WinRT api 开始,Microsoft 确实努力让其停用。不完全是 slamdunk 的成功,也许 Windows 10 会给它一些牵引力。使 WinRT 在幕后工作的基础技术是 COM,它是 C 的一大进步,因为它可以支持对象模型。尽管它很好地隐藏在友好的语言预测中,但 COM 编程是大多数程序员会尽量避免的事情:)

关于c# - 你为什么要覆盖 wndproc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com