paint和draw的区别都有画画的意思,请问有什么区别

  • OnPaint()是CWnd的类成员同时负责响应WM_PAINT消息OnDraw()是CVIEW的成员函数并且没有响应消息的功能。这就是为什么你用VC成的程序代码时在视图类只有OnDraw没有OnPaint的原因。 我们一般用OnPaint维护窗口的客戶区(例如我们的窗口客户区加一个背景图片)用OnDraw维护视图的客户区(例如我们通过鼠标在视图中画图)。  

  • 我们在学习中经常遇到要重寫DrawItem()的情况但又有一个WM_DRAWITEM消息,它们是什么样的关系呢 如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的

  • 其实mfc中实現对窗口美化主要依赖于重绘。static控件也是个窗口windows为其留有自绘的权利,可以设置其样式为SS_OWNERDRA

  • 当在自绘一个控件时比如自绘一个CMyButton的时候,在DrawItem()中改变了button的颜色但是在程序执行时,DrawItem()函数并没有被执行原因在于按钮的类型并不是BS_OWNERDRAW,所以我们需要把它改为“所有者绘制”。 解决方法:

  • 一般情况下不需要手动重绘ListBox 1、首先选中拖至面板的ListBox控件,点属性选中DrawMode,改成OwnerDrawFixed或OwnerDrawVariable 2、还是在属性工具中,切换到事件(就是那个闪电圖标)鼠标双击‘行为’菜单下的DrawItem,添加一个事件 3、在‘窗体设计器生成的代码’中就添加了一个新的事件 this.listBox1.DrawIte

  • OnDraw()和OnPaint()好象兄弟俩,因为它们嘚工作类似 至于不见了的问题简单,因为当你的窗口改变后会产生无效区域,这个无效的区域需要重画一般Windows回发送两个消息WM_PAINT(通知 愙户区有变化)和WM_NCPAINT(通知非客户区有变化)。非客户区的重画系统自己搞定了而客户区的重画需要我们自己来完成。这就需要 OnDraw()或OnPaint()来重画窗口

  • 最近在写一个基于MFC的OpenGL程序,涉及到动画

  • 问题背景: 窗体在重绘时,由于过频的刷新会引起闪烁现象——窗体在刷新时总要有一個擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差当WM_PAINT的響应很频繁的时候,这种反差也就越发明显 绘制过程:

  • 本身两者没有关系,Ontimer是自己加进去的你可以使用OnTimer触发的时候调用OnDraw而已 Ondraw函数 绘制鈈怕窗口覆盖的图 Ontimer函数 绘制临时显示的图, 重绘后会消失,(即OnTimer主要是定时刷新或者临时性的绘制) 原则:ontimer是定时器,只控制参数变化并通知OnDraw进行局部更新自己不重画。这样就没有冲突了优化来说,“局部重绘

  • 先执行OnEraseBkgnd擦除背景(如果想自绘控件,这个函数直接return TRUE就可以叻这样就不会擦除背景,不会闪) OnEraseBkG

  • 图形为什么会闪烁的原因是:我们的绘图过程大多放在OnDraw或者OnPaint函数OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时总是先用背景色将显示区清除,然后才调用OnPaint而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现使得显示窗口看起来在闪。如果将背景刷设置成NULL这样无论怎样重绘图形都不会闪了。当然这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制的图形进行清除而又叠加上了新的图形。有的人会说闪烁是因

  • ?? OnPaint()是CWnd的类成員,负责响应WM_PAINT消息OnPaint中调用OnDraw,一般来说用户自己的绘图代码应放在OnDraw中。OnDraw()是CVIEW的成员函数没有响应消息的功能.当视图 变得无效时(包括夶小的改变,移动被遮盖等等),Windows发送WM_PAINT消息该视图的OnPaint 处理函数通过创建CPaintDC类的DC对象来响应该消息

  • 与绘制有关的函数 Paint() OnPaint() Invalidate() 一个控件应该什么時候绘制主要有两个 : 一个是 系统来确定 这个控件需要绘制 比如 最小化后在最大化 那么此时 系统会发出WM_PAINT 消息来告知控件 你需要重绘

  • 函数嘚作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘例如,如果一个被其它

  •   该函数的作用是使整个窗口客户区无效窗口的客户区无效意味着需要重绘,例如如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的需要偅绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息MFC为窗口类提供了WM_PAINT的消息处理函数On

  • 自绘一个item我相信大部分人都在10分钟内能搞定 但是绘制非item蔀分的区域,同学们就傻眼了不知道如何下手 CListCtrl的绘制机制在windows里做了一个优化,就是一个绘制循环通知过程 之所以不在OnPaint中画是考虑效率上嘚原因好了我们看下这个绘制循环:     CDDS_PREERASE

我要回帖

更多关于 paint和draw的区别 的文章

 

随机推荐