`

关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别

    博客分类:
  • MFC
阅读更多

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函数.
分享到:
评论

相关推荐

    MFC 基本常用控件重绘

    5. **处理WM_PAINT消息**: 在派生类的OnPaint函数中,调用基类的OnPaint实现标准绘制,然后添加自定义绘制代码。 **NewControls项目** "NewControls"可能是项目的源代码文件夹,其中包含了实现以上重绘功能的源代码...

    Duilib 控件重绘教程附带例子

    总之,Duilib 控件重绘涉及到控件的继承、消息处理、图形绘制等多个方面。通过深入理解这些概念和方法,开发者可以创建出极具个性和吸引力的用户界面,提升应用的用户体验。实践中不断尝试和调试,将是掌握Duilib...

    MFC控件重绘MFC控件重绘

    总结来说,MFC控件重绘涉及对`OnDraw`等函数的重写,以及消息映射机制的利用,以达到定制控件外观的目的。`SkinWin.cpp`和`SkinWin.h`中的代码很可能是实现这一功能的具体实现。通过深入理解这些概念和实践,开发者...

    VC++对话框程序picture控件图像重绘

    要实现图像重绘,你需要覆盖对话框类的`OnPaint()`函数。`OnPaint()`函数在窗口需要更新时被调用,我们可以在这里进行自定义绘制。但需要注意,picture控件通常不直接支持重绘,因为它是静态控件。你可以考虑两种...

    窗体控件重绘

    "窗体控件重绘"是这个过程的关键技术,它允许开发者覆盖默认的绘制行为,创建独特的视觉效果。本压缩包包含了Button、Form、CheckBox、ListBox、TabControl和TextBox等常用控件的重绘示例,这些实例代码对于初学者和...

    控件重绘 C# WinForm控件美化扩展系列之TabControl

    在C#中,控件重绘主要涉及OnPaint事件,这是当控件需要绘制其内容时触发的事件。我们可以通过重写控件的OnPaint方法,使用Graphics对象和各种绘图方法来自定义控件的外观。例如,我们可以使用DrawString绘制文本,...

    OnPaint()与OnDraw()的区别

    - `OnPaint`主要用于响应系统发出的重绘请求,即当视图窗口需要重新绘制时被调用。 - `OnDraw`则用于执行具体的绘图操作,如绘制图形、文字等。 3. **执行时机不同**: - `OnPaint`在收到`WM_PAINT`消息时被调用...

    控件重绘 C# WinForm控件美化扩展系列之ListView

    在实际开发中,除了重绘控件,还可以利用.NET Framework提供的其他特性来增强ListView的功能,比如使用OwnerDraw属性开启自绘模式,或者利用DrawColumnHeader和DrawItem事件来分别绘制列头和列表项。 总结来说,...

    VC++MFC重绘控件.zip

    - 继承MFC的控件类,并覆盖OnPaint方法进行重绘工作。 - 使用CBrush、CPen等类创建画刷和笔,控制线条和填充的颜色。 - 理解CDC类中的绘图函数,如MoveTo、LineTo、Ellipse、Rectangle等,以绘制几何形状。 - 注意...

    OnDraw与OnPaint有什么区别

    在探讨“OnDraw与OnPaint有什么区别”这一主题时,我们深入分析了这两个函数在Microsoft Foundation Classes (MFC)框架中的角色与差异。MFC是Windows应用程序开发中广泛使用的一个库,它为开发者提供了丰富的类和...

    vc多种控件重绘,美化界面!

    控件的重绘主要是通过覆盖默认的绘图机制,即重写OnDraw()函数或利用WM_PAINT消息来实现。以下是一些关键的知识点: 1. **控件重绘基础**: - 控件的绘制过程通常涉及到WM_PAINT消息的处理。当窗口需要更新时,...

    简单winform控件重绘

    在Windows Forms(WinForm)开发中,控件的重绘是一项基本且重要的任务,它涉及到图形用户界面(GUI)的设计和定制。控件重绘可以让开发者根据需求自定义控件的外观,创建出独特的UI效果。本文将深入探讨WinForm控件...

    MFC控件CTabCtrl的重绘,支持背景颜色、tab头字体颜色、背景色的修改

    关于背景颜色的修改,我们可以在`OnPaint`中先清除整个控件的背景,使用`FillRect`函数并指定我们自定义的颜色。对于字体颜色,可以使用`SetTextColor`函数,根据是否选中tab来设置不同的颜色。同时,为了突出显示...

    winform gdi+重绘窗体 控件

    - checkbox控件的重绘需要处理`OnPaint`事件,根据控件的状态(如是否被选中)调整绘制。可以用`DrawRectangle`绘制勾选标记,`DrawString`绘制文字,并根据选中状态调整颜色。 3. **换肤** - 换肤是指用户可以...

    c#Winform Combox控件重绘

    重绘可以通过覆盖控件的`OnPaint`事件来实现,这是一个关键的自定义绘图方法。在Combox控件的重绘过程中,我们将自定义绘制其背景、边框、文本等元素,以达到个性化的视觉效果。 步骤1:创建项目 打开Visual Studio...

    MFC树控件重绘

    使用Onpaint 重绘树控件,树控件图片动态载入,达到了一般聊天工具基本功能(大小头像的转换,浮动提示框,鼠标移动改变背景色,姓名和心情同行不同字体格式等一些功能),现在与大家一起分享,绝对值5分,保证你不...

    VC++ CEDIT控件重绘,插入背景图

    重绘CEdit控件涉及的主要过程是覆盖OnPaint()函数,这是窗口接收WM_PAINT消息时调用的函数。在该函数中,我们可以利用CDC(Device Context)类进行图形绘制。首先,我们需要创建一个CDC对象,然后获取CEdit控件的...

    MFC 之 CButton 控件重绘(GDI+篇)

    本文将深入探讨如何利用MFC中的CButton控件,并结合GDI+技术来实现不规则形状和透明效果的按钮重绘。 首先,让我们了解CButton控件。它是MFC库中一个基本的用户界面元素,用于创建具有标准按钮功能的窗口。默认情况...

    CTreeCtrl控件重绘总汇

    - **RedrawWindow()函数**:调用CTreeCtrl对象的RedrawWindow()函数可以强制控件立即重绘。这在需要即时更新视觉效果时非常有用。 - **SetRedraw()函数**:可以临时禁用或启用控件的自动重绘功能,提高性能。在...

    控件重绘 自定义

    在编程领域,控件重绘和自定义是增强用户界面(UI)个性化和功能扩展的重要技术。本主题将深入探讨如何对.NET Framework中的`dataGridView`、`button`和`tabControl`这三种常见控件进行重绘和自定义,以实现独特的...

Global site tag (gtag.js) - Google Analytics