什么是无窗口控件?

Posted

技术标签:

【中文标题】什么是无窗口控件?【英文标题】:What is a windowless control? 【发布时间】:2011-01-08 21:40:54 【问题描述】:

在 Windows 下,它们称为无窗口控件。

RichEdit

什么是无窗口控件,它有什么好处?

【问题讨论】:

我的第一个想法是“不需要窗口句柄”。 【参考方案1】:

This 可能会有所帮助。

【讨论】:

我正在寻找高级解释/历史。不过感谢您的链接。【参考方案2】:

无窗口控件是一种无需创建窗口即可为您提供控件行为的对象。

当您想要修改或扩展行为时,或者想要在创建窗口不方便或困难的地方使用行为时,这很有用。

比如说,你想在一个页面上嵌入数百个富编辑控件,如果它们是每个窗口,那么每个都必须获得焦点才能获得用户输入,并且每个都将单独绘制,等等。

但是,如果您愿意跟踪无窗口控件的位置并进行一些通常可以通过创建窗口免费获得的其他内务管理(即路由键盘消息),那么您可以以更低的开销获得更好的结果通过使用无窗口控件。

【讨论】:

【参考方案3】:

无窗口控件没有专用的窗口句柄。

【讨论】:

好的...这样就定义了一个无窗口控件,但是没有窗口句柄的控件有什么好处和用途呢?【参考方案4】:

Anon's 对。这是一个不需要底层窗口句柄 (HWND) 的控件。对这些的需求尤其出现在 Web 浏览器中,因为每个进程最多只能处理 10,000 个句柄。您会像打开两个半复杂网页的选项卡一样打开,并且会用完句柄。

使用并且尤其是滚动您自己的无窗口控件很难,因为至少您需要重新创建它们的原始实现,有时非常复杂和棘手。 (例如:IE's listbox is still windowed control because of all the tricky intricacies)

【讨论】:

【参考方案5】:

在我看来,无窗口控件可能会使用更少的 sys 资源,并且更容易自定义

【讨论】:

以上是关于什么是无窗口控件?的主要内容,如果未能解决你的问题,请参考以下文章

vs2008,c#,我想修改窗口控件的位置和大小。

winform标题栏用的是啥控件?

MFC怎么知道哪个窗口对应的哪个类

C# DEV控件 判断 窗口中是不是有 barManager 控件

wpf 控件样式从窗口继承

ASP.NET服务器控件打开新窗口怎样做到不刷新原页面