只要重载OnPaint事件就可以了。爱怎么画就怎么画。

解决方案 »

  1.   

    回答和提问等级不一样
    我的绘制是要重载类库OnPaint已经是应用级的代码了Sorry
      

  2.   


    是呀,但是你重载paint函数就可以了呀
      

  3.   

    控件编写中要考虑各种消息产生、接收和处理
    要能绘制自身的控件组
    一定要自己控制ControlStyle属性
    但是这个属性的单项集合必须与其他属性配套使用这个问题是有一定难度的
    希望高手发言  :)
      

  4.   

    我的看法(不是高手):既然已经是TWinControl的派生类,那么许多细节的东西TWinControl已经处理了,象你所说的绘制自身的控件组,TWinControl已经做了处理,可以通知控件组让其绘制。所以没有你所想象的那么麻烦。你在实际应用中遇到什么具体问题呢?
      

  5.   

    呵呵  More Details  = 1、如何通知控件组重绘 
    自己的Code中是不能用 
    Include(FControlState,[csCustomPaint]);
    可以用一个TmpConstrolState来处理2、窗体变更消息有多少
    如WM_SIZE和WMWindowPosChanged、CMCOLORCHANGED之类
    设置Align又是怎么起作用的呢
    <alClient>当父控件变大缩小时发出多少消息:)
      

  6.   

    1 帮你提前
    2 只要用Refresh()就可以通知所有的控件组刷新呀?
      

  7.   

    TControl.Refresh;==>
    = Procedure Refresh;
    Effect 
      Repaints the control on the screen.
    Description
      Call Refresh method to repaint the control immediately. 
    Refresh calls the Repaint method. Use the Refresh and 
    Repaint methods interchangeably.  但是,其实只有TWinControl=Class(TControl)及其派生类才是
    可以容纳其他控件的类。所以,逻辑上TControl的Refresh最多是通
    知所有的控件重绘,并不能通知"所包含"的控件集合重绘。
      从TWinControl类是所有窗口类的基类出发,可以把它当成是一个
    窗口,用消息的方式进行控制。所以需要查找到影响重绘的消息机制。  现在我已经采用其他的办法在自己定制的部件上放置了类似控件的
    东西来操纵图形,但是在Code的过程中遇到的这个问题很有钻头,特
    别弄出来大家一起提高提高吧:)
      

  8.   

    >>逻辑上TControl的Refresh最多是通
    >>知所有的控件重绘,并不能通知"所包含"的控件集合重绘
    看了半天也没搞清楚你想做什么操作。
    能帖些代码出来看看吗?
      

  9.   


    但是TWinControl的Refresh已经重载了Refresh,会自动通知其所包含的控件重绘。
    我这里“包含”的意思是Parent为该控件的控件。
    例如:TChildControl.Parent := TParentControl;
    TParentControl.Refresh; //会自动通知TChildControl做重绘操作。
      

  10.   

    To guig(胖胖):
      逻辑上TControl的Refresh最多是通知窗口上的所有控件重绘
      而不是通知该TControl包含的子控件集合重绘另外,Refresh将会发出什么样的控制消息呢?