delphi – CreateWnd和CreateWindowHandle有什么区别?

前端之家收集整理的这篇文章主要介绍了delphi – CreateWnd和CreateWindowHandle有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Delphi组件有CreateWnd和CreateWindowHandle(和DestroyWnd和DestroyWindowHandle)。他们都打算被后代所覆盖,对吧?除了基础的VCL实现之外,不打算被调用

他们有什么区别?他们什么时候应该被覆盖?

解决方法

到目前为止,这里的大多数答案几乎都是标记,你会很好地听从他们的建议。但是,这个故事还有一点点。对于你什么时候重写一个或另一个的具体问题,我会尝试一下简单的事情。

的CreateParams();

一般来说,大部分时间您真正需要做的是覆盖CreateParams()。如果你想做的只是子类(记住Windows风格的“子类化”,请参阅Petzold在Windows编程中的开创性工作)一个现有的控件类,并将其包装在VCL控件中,您可以从CreateParams执行此操作。您还可以控制什么样的位设置和其他各种参数。我们使创建“子类”的过程非常简单。只需从CreateParams()方法调用CreateSubClass()。有关例如TCheckBox或TButton,请参阅核心VCL控件。

CreateWnd方法();

如果您需要在窗口句柄创建后再做一点更多操作,那么您将覆盖此操作。例如,如果您有某种控件是某种列表,树或其他方式需要创建后配置,则可以在此处执行。调用继承的CreateWnd,当它返回(你知道你有一个有效的句柄,如果你从CreateWnd返回,因为它会引发一个异常,如果出现问题),只需应用你的额外的魔法。常见的情况是将缓存在实例TStrings列表中的数据实际移动到底层窗口控件中。 TListBox是一个典型的例子。

CreateWindowHandle();

我不得不在这个记忆中刷新我的记忆,但似乎这是一个很少,如果有的话,被覆盖。在VCL本身的少数情况下,它似乎是用来处理特定的Windows版本和区域设置的怪物与一些控件,如TEdit和TMemo。另一个更明确的例子是TCustomForm本身。在这种情况下,它支持旧的MDI(mutli-document interface)模型。在这种情况下,无法使用普通的CreateWindowEx()API创建MDI子项,必须向MDI父框架发送消息才能实际创建句柄。因此,超越这种方法的唯一原因是如果通过与旧的试用和真实的CreateWindowEx()完全不同的手段来创建句柄的实际过程。

我确实注意到你的问题只是询问创建过程,但是有些方法在某些情况下被覆盖,因为这两种方法都被破坏,而有时围绕句柄的“巫术”则被覆盖。但这些是应该分开讨论的其他主题:-)。

原文链接:https://www.f2er.com/delphi/103505.html

猜你在找的Delphi相关文章