关于WM_PAINT的问题 窗口得到WM_PAINT消息, 完成这个消息之后是如何将新的内容更新到屏幕上面去的?一直不明白, 还请指教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 响应WM_PAINT函数就会调用OnPaint函数在OnPaint中通过调用CDC函数将图形或图像画到屏幕上 你的意思是说WM_PAINT里面会自己去调用更新?那么是哪个函数, 或者消息去更新的呢?谢谢. re: xuanzg(小钢娃)呵~~没来晚. 响应WM_PAINT函数就会调用OnPaint函数在OnPaint中通过调用CDC函数将图形或图像画到屏幕上 晕...消息WM_PAINT->调用函数OnPaint->函数OnPaint中,画要显示的内容 Re: ExplorerOfVc(寥若晨星)晕..第一位的COPY版. -_____-|||几位误会我的意思了, 这里说的"画显示的内容", 它是画到SCREEN DC上面, 还是FRAME DC上面如果是SCREENT DC上面, 那就没有问题了, 如果是FRAME DC上的话, 那么是在什么地方将FRAME DC上面的更新区域提交到SCREEN DC上面呢?谢谢. 应该是:响应WM_PAINT消息就会调用OnPaint函数在OnPaint中通过调用CDC函数将图形或图像画到屏幕上,写错了,呵呵。WM_PAINT本身只是个消息的标识,并不是函数MFC中为WM_PAINT这个消息配备的相应函数是OnPaint,也就是说你的程序一接受到WM_PAINT,就自动调用OnPaint 画到客户区的dc上,既不是屏幕dc,也不是框架dc,他们的重画由他们自己维护,你不用管,WM_PAINT处理消息的过程就是把内容会知道屏幕上的过程 WM_PAINT处理消息的过程就是把内容会知道屏幕上的过程.这句是不是说当前的DC其实就是映射到SCREEN DC上面呢? 我画到这个DC上面的东西其实就是画到SCREEN DC上面呢?不管是不是这倒是个不错的想法. Re: gufengduyu(聪明的呆呆龙)呵呵~我是想知道WM_PAINT(OnPaint)倒底将要画的东西画到什么地方去了, 最终是如何显示到屏幕上面的.感谢你的帮忙~ 你是要剖析GDI的内部结构吧, 我也想知道:) 一旦某个窗口需要重画窗口过程便会收到WM_PAINT消息(MFC中映射到了On_Paint函数中)可以调用API函数来获得需要重画的区域的HDC(MFC中已经封装了此过程)你只需要在此DC中重画即可保证得到所需要的结果 我同意聪明的呆呆龙,如果ONPAINT没有改写,则会自动调用ONDRAW。 正如 ctan(ctan) 所言, 我正是想知道GDI内部结构(不过也只是冰山一角啦).还请各位帮帮忙~~~~非常感谢. 简述(随便写写,一家之言):在DOS时代,我们做显示时,往往必须获得硬件相关的参数/资源,然后调用中断子程序来显示.这样做最大的问题就是硬件的兼容性不能保证,换个显卡你的程序能不能运行就成了一个很大的问题.为了解决这个问题,Win32的GDI对硬件显示层作了屏蔽,通过一个标准而统一的HDC资源作显示(给我一个HDC,我可以做一切显示),HDC与显卡子程序的交流由操作系统/驱动程序负责.当前活动且保持在屏幕最前(即需要显示)的显示区域会映射到内存的显示区域(操作系统管理),所以你在自己HDC上画的东东,会"自动"地将"需要显示的部分"映射到此显示区域,再定时由操作系统将其传输到显存上进行显示. OHHH~~ VERY GOOD~这里也讲到了: "所以你在自己HDC上画的东东,会"自动"地将"需要显示的部分"映射到此显示区域"就是说当前PAINT的就是SCREEN DC了.那么窗口也就没有自己的DC了? 每次要PAINT的时候, 由GDI建立一块映射到当前SCREEN DC上面的DC过来给窗口来PAINT, EndPaint()就是将画完的DC提交上去...也就是说, 所有的窗口对PAINT的操作都只是在一个大的SCREEN DC上面操作, 根本没有FRAME DC这个东西, 这个只是一个映射出来的SCREEN DC上的区域.这样子说对吗?通过的话这个帖可以结了~~ 基本上可以这么理解.再进一步:每一个窗口创建以后都会申请到一个DC,(DC本质就是一个表格),申请到DC后,会往这个DC里填相关数据.以后如果这个窗口需要显示时(我认为如果这个窗口没有显示的时候,在内存里是不应该有显示的,当然,如果考虑效率使用显示缓冲的话,则另当别论,其间利敝很难说),则通过DC里的数据,把窗口在内存里"画"出来.再细一些,窗口的子窗口怎么显示?估计DC是可以找到它的"子"DC的,譬如通过链表一类的结构.具体怎么实现就没有必要深究了,实现方法千千万.以上皆为凭空而言,仅作为理解之用,无理论依据... 谢谢 nlstone(天外流星) 这想法很棒.谢谢各位. VC6.0下怎么让MSFLEXGRID上 OnInitDialg函数的调用问题 malloc出错了。 用MFC的Recordset类的的Open成员函数执行一个SQL语句时出现的奇怪问题 CListCtrl加载背景图像的问题 为什么要用VC编数据库程序?PB VB等不是很简单吗?请详细说明 谁知道window下面有苹果的虚拟机 afx是什么意思 熟悉vc5.0的高手请回答 为什么会有这样的错误??? 有没有人用2000 server 下的SMTP服务 为什么在使用ADO访问数据时,使用MovePrevious()时出错??(附代码)
OnPaint函数
在OnPaint中通过调用CDC函数将图形或图像画到屏幕上
那么是哪个函数, 或者消息去更新的呢?
谢谢.
呵~~没来晚.
OnPaint函数
在OnPaint中通过调用CDC函数将图形或图像画到屏幕上
消息WM_PAINT->调用函数OnPaint->函数OnPaint中,画要显示的内容
晕..第一位的COPY版.
几位误会我的意思了, 这里说的"画显示的内容", 它是画到SCREEN DC上面, 还是FRAME DC上面如果是SCREENT DC上面, 那就没有问题了, 如果是FRAME DC上的话, 那么是在什么地方将FRAME DC上面的更新区域提交到SCREEN DC上面呢?
谢谢.
响应WM_PAINT消息就会调用
OnPaint函数
在OnPaint中通过调用CDC函数将图形或图像画到屏幕上
,写错了,呵呵。WM_PAINT本身只是个消息的标识,并不是函数
MFC中为WM_PAINT这个消息配备的相应函数是OnPaint,也就是说
你的程序一接受到WM_PAINT,就自动调用OnPaint
不管是不是这倒是个不错的想法.
呵呵~
我是想知道WM_PAINT(OnPaint)倒底将要画的东西画到什么地方去了, 最终是如何显示到屏幕上面的.
感谢你的帮忙~
窗口过程便会收到WM_PAINT消息
(MFC中映射到了On_Paint函数中)
可以调用API函数来获得需要重画的区域的HDC
(MFC中已经封装了此过程)
你只需要在此DC中重画
即可保证得到所需要的结果
还请各位帮帮忙~~~~
非常感谢.
在DOS时代,我们做显示时,往往必须获得硬件相关的参数/资源,然后调用中断子程序来显示.
这样做最大的问题就是硬件的兼容性不能保证,换个显卡你的程序能不能运行就成了一个很大的问题.
为了解决这个问题,Win32的GDI对硬件显示层作了屏蔽,通过一个标准而统一的HDC资源作显示(给我一个HDC,我可以做一切显示),HDC与显卡子程序的交流由操作系统/驱动程序负责.
当前活动且保持在屏幕最前(即需要显示)的显示区域会映射到内存的显示区域(操作系统管理),所以你在自己HDC上画的东东,会"自动"地将"需要显示的部分"映射到此显示区域,再定时由操作系统将其传输到显存上进行显示.
这里也讲到了:
"所以你在自己HDC上画的东东,会"自动"地将"需要显示的部分"映射到此显示区域"
就是说当前PAINT的就是SCREEN DC了.那么窗口也就没有自己的DC了? 每次要PAINT的时候, 由GDI建立一块映射到当前SCREEN DC上面的DC过来给窗口来PAINT, EndPaint()就是将画完的DC提交上去...
也就是说, 所有的窗口对PAINT的操作都只是在一个大的SCREEN DC上面操作, 根本没有FRAME DC这个东西, 这个只是一个映射出来的SCREEN DC上的区域.
这样子说对吗?
通过的话这个帖可以结了~~
再进一步:
每一个窗口创建以后都会申请到一个DC,(DC本质就是一个表格),申请到DC后,会往这个DC里填相关数据.以后如果这个窗口需要显示时(我认为如果这个窗口没有显示的时候,在内存里是不应该有显示的,当然,如果考虑效率使用显示缓冲的话,则另当别论,其间利敝很难说),则通过DC里的数据,把窗口在内存里"画"出来.
再细一些,窗口的子窗口怎么显示?估计DC是可以找到它的"子"DC的,譬如通过链表一类的结构.具体怎么实现就没有必要深究了,实现方法千千万.以上皆为凭空而言,仅作为理解之用,无理论依据...
谢谢各位.