在开发可视化控件的时候遇到一些问题
关于有句柄和无句柄的控件
有句柄的控件基类一般都选择TCustomControl
无句柄的控件基类一般都选择TGraphicControl
那么这两种控件之间的区别有哪些呢?
无句柄控件的实质是什么?目前我观察到的区别有这些
欢迎大家补充
1.有句柄的控件具有焦点
2.有句柄的控件可以接受消息
3.有句柄的控件可以有自己的消息来重画,而无句柄的控件需要依赖其Owner来通知其重画?是这样的吗?
4.无句柄的控件占有的资源少?(书上就说有句柄的多了一个句柄资源)
5.无句柄的绘制更快?调用有句柄的控件的Repaint方法只会重画其控件区域的部分,而无句柄的会重画其Owner?开发控件的时候什么时候选择有句柄的,什么时候选择无句柄的呢?
好像滚动条只有有句柄的控件才有 我用无句柄的自己画滚动条可行吗?

解决方案 »

  1.   

    标准的windows控件都是有句柄的
    继承于TWinControl的控件都有句柄
      

  2.   

    标准的windows控件都是有句柄的
    继承于TWinControl的控件都有句柄
      

  3.   

    1.有句柄的控件具有焦点
    2.有句柄的控件可以接受消息
    3.有句柄的控件可以有自己的消息来重画,而无句柄的控件需要依赖其Owner来通知其重画?是这样的吗?
    4.无句柄的控件占有的资源少?(书上就说有句柄的多了一个句柄资源)
    5.无句柄的绘制更快?调用有句柄的控件的Repaint方法只会重画其控件区域的部分,而无句柄的会重画其Owner?
      

  4.   

    TImage TLabel 等等 这些都是没句柄的 
    补充一点 无句柄的控件不能做为其它控件的Parent
      

  5.   


    TCustomControl = class(TWinControl)
    TGraphicControl = class(TControl)
    TWinControl = class(TControl)
    看了TWinControl的Create方法有这么一行代码FObjectInstance := Classes.MakeObjectInstance(MainWndProc);
    原来有句柄的控件就是多了处理消息的过程,焦点,重画,滚动条,等都是通过消息处理来完成的!
    所以如果你开发的控件不需要处理消息,则继承于TGraphicControl更好。
      

  6.   

    参考 <<DesignInDelphi>> 第113页
      

  7.   


    这个其实无所谓,任何控件都可以用无句柄的方式来写,只是会比有句柄的来写要复杂许多许多!
    具体的楼主可以参考我写的Delphi组件开发教程指南的概述
      

  8.   

    标准的windows控件都是有句柄的
    继承于TWinControl的控件都有句柄 
     
      

  9.   

    找不到适合我的教材!!!!!我现在会简单的c++ c# asp.net  可是看到他们的什么句柄什么。。又什么汇编之类的 都不懂 也不知道从哪里开始学习,有没有高手指点一下
      

  10.   

    在Windows中,句柄是一个系统内部数据结构的引用。例如,当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此,你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为图标,等等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等等,不仅仅局限于窗口函数。   换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等等。