zoukankan      html  css  js  c++  java
  • VC++中关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别

    而OnPaint()是CWnd的类成员,同时负责响应WM_PAINT消息。

    OnDraw()是CVIEW的成员函数,并且没有响应消息的功能。这就是为什么你用VC成的程序代码时,在视图类只有OnDraw没有OnPaint的原因。

    我们一般用OnPaint维护窗口的客户区(例如我们的窗口客户区加一个背景图片),用OnDraw维护视图的客户区(例如我们通过鼠标在视图中画图)。

     =====================================================================================================================

    1.OnPaint: WM_PAINT
      消息函数,接受到WM_PAINT消息时,首先调用的是onpaint(),onpaint()再调用ondraw()

     OnPaint()-àOnDraw();

    2.OnDraw:虚函数,需要重载

    3.OnDrawItem: WM_DRAWITEM

     子控件有自画属性且控件需重画时,父窗口会调用该函数

      在具有Owner Draw属性的控件需要重画的时候,就会激发OnDrawItem

     当自画子按钮控件、组合框控件、列表框控件或菜单的可视部分需要被画出时调用这个函数

     OnDrawItem()-àDrawItem();

    4.DrawItem:虚函数,需要重载

      如果使用DrawItem来自画控件,需要给控件加上自画样式,然后重载该控件类的自画函数(DrawItem)函数,如果该控件的父窗口提供了ON_WM_DRAWITEM消息映射宏,并重载了OnDrawItem函数,则重画消息会由父窗口处理,父窗口调用基类的OnDrawItem来调用派生的子控件的DrawItem函数.
     
    ======================================================================================================================

    OnDrawItem是画窗口中的子控件的,因为它的入口参数LPDRAWITEMSTRUCT带入不同子控件的相关参数,而且,你得把字控件设置成“自画”类型,才会调用到OnDrawItem,顺便说一下自画,不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,但象菜单,按钮等的自画则会调用OnDrawItem。 

    OnPaint和OnDrawItem不在一个范畴内,他是WM_PAINT的响应函数,凡是基于CWnd的类都有OnPaint事件发生,就是说凡是窗口都有WM_PAINT事件发生。

  • 相关阅读:
    每天学习Linux——日志管理
    每天学习Linux——日志查看
    每天学习Linux命令——history
    .NET中property与attribute的区别,以及反射机制
    java内部类
    java的多态
    子类构造方法
    单例模式
    重载,重写
    数据库调优的方法有那些
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/4749379.html
Copyright © 2011-2022 走看看