在开发可视化控件的时候遇到一些问题
关于有句柄和无句柄的控件
有句柄的控件基类一般都选择TCustomControl
无句柄的控件基类一般都选择TGraphicControl
那么这两种控件之间的区别有哪些呢?
无句柄控件的实质是什么?目前我观察到的区别有这些
欢迎大家补充
1.有句柄的控件具有焦点
2.有句柄的控件可以接受消息
3.有句柄的控件可以有自己的消息来重画,而无句柄的控件需要依赖其Owner来通知其重画?是这样的吗?
4.无句柄的控件占有的资源少?(书上就说有句柄的多了一个句柄资源)
5.无句柄的绘制更快?调用有句柄的控件的Repaint方法只会重画其控件区域的部分,而无句柄的会重画其Owner?开发控件的时候什么时候选择有句柄的,什么时候选择无句柄的呢?
好像滚动条只有有句柄的控件才有 我用无句柄的自己画滚动条可行吗?
关于有句柄和无句柄的控件
有句柄的控件基类一般都选择TCustomControl
无句柄的控件基类一般都选择TGraphicControl
那么这两种控件之间的区别有哪些呢?
无句柄控件的实质是什么?目前我观察到的区别有这些
欢迎大家补充
1.有句柄的控件具有焦点
2.有句柄的控件可以接受消息
3.有句柄的控件可以有自己的消息来重画,而无句柄的控件需要依赖其Owner来通知其重画?是这样的吗?
4.无句柄的控件占有的资源少?(书上就说有句柄的多了一个句柄资源)
5.无句柄的绘制更快?调用有句柄的控件的Repaint方法只会重画其控件区域的部分,而无句柄的会重画其Owner?开发控件的时候什么时候选择有句柄的,什么时候选择无句柄的呢?
好像滚动条只有有句柄的控件才有 我用无句柄的自己画滚动条可行吗?
继承于TWinControl的控件都有句柄
继承于TWinControl的控件都有句柄
2.有句柄的控件可以接受消息
3.有句柄的控件可以有自己的消息来重画,而无句柄的控件需要依赖其Owner来通知其重画?是这样的吗?
4.无句柄的控件占有的资源少?(书上就说有句柄的多了一个句柄资源)
5.无句柄的绘制更快?调用有句柄的控件的Repaint方法只会重画其控件区域的部分,而无句柄的会重画其Owner?
补充一点 无句柄的控件不能做为其它控件的Parent
TCustomControl = class(TWinControl)
TGraphicControl = class(TControl)
TWinControl = class(TControl)
看了TWinControl的Create方法有这么一行代码FObjectInstance := Classes.MakeObjectInstance(MainWndProc);
原来有句柄的控件就是多了处理消息的过程,焦点,重画,滚动条,等都是通过消息处理来完成的!
所以如果你开发的控件不需要处理消息,则继承于TGraphicControl更好。
这个其实无所谓,任何控件都可以用无句柄的方式来写,只是会比有句柄的来写要复杂许多许多!
具体的楼主可以参考我写的Delphi组件开发教程指南的概述
继承于TWinControl的控件都有句柄