产生WM_PAINT 消息】的更多相关文章

UpdateWindow会检查窗口的Update Region,当其不为空时才发送WM_PAINT消息:RedrawWindow则给我们更多的控制:是否重画非客户区和背景,是否总是发送WM_PAINT消息而不管Update Region是否为空. BeginPaint函数的作用就是将窗口需要重绘的区域设置为空(也就是Update Region置空).在正常情况下,我们接收到了WM_PAINT消息后,窗口的Update Region都是非空的(如果为空就不需要发送WM_PAINT消息了).而当你响…
使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_ERASEBKGND和WM_PAINT两个消息. 使用Invalidate(FALSE)函数时,它只会向消息队列中添加了WM_PAINT消息. WM_ERASEBKGND消息的作用以背景色填充客户区,因此他会将之前绘制的图像情况,然后响应WM_PAINT消息后,会调用OnPaint函数,进行响应图像绘制工作.故Invalidate(TRUE)相当于将原来画的内容清空后,重新绘制. 而Invalidate(TRUE)只发送WM…
WM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作. 1. 系统何时发送WM_PAINT消息? 系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由 系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作:大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过Invalidat…
什么时候会触发WM_PAINT消息消息呢? 以下内容来自大名鼎鼎的<Windows程序设计(第五版)> 大多数Windows程序在WinMain中进入消息循环之前的初始化期间都要呼叫函数UpdateWindow.Windows利用这个机会给窗口消息处理程序发送第一个WM_PAINT消息.这个消息通知窗口消息处理程序:必须绘制显示区域.此后,窗口消息处理程序应在任何时刻都准备好处理其它WM_PAINT消息,必要的话,甚至重新绘制窗口的整个显示区域.在发生下面几种事件之一时,窗口消息处理程序会接收…
Q:wm_paint消息在窗口重绘的时候产生,那什么时候窗口会重绘?? A: 严格地说,只有当收到WM_PAINT消息后窗口会重绘 但是引起这个消息的事件有很多, 比如:1.首次创建 2.移动 3.改变大小4.showwindow/ activate window/ invalidate window .... 优点: 1/ 系统为什么不在调用Invalidate时发送WM_PAINT消息呢?又为什么非要等应用消息队列为空时才发送WM_PAINT消息呢?这是因为系统把在窗口中的绘制操作当作一种低…
我忽然发现:TButton既没有处理WM_PAINT,又没有Paint()或者PaintWindow(),那么它是什么时候被绘制的? Form1上放2个TButton,然后设置代码: procedure TForm1.Button1Click(Sender: TObject); begin button2.Repaint; end; procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage('good'); end; 在F…
参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=2190768 Windows 2000后,为了支持类似MAC界面的Alpha通道混合效果,提供了GDI+,提供了很多的界面功能函数,可以实现很好的界面效果.例如可以使用UpdateLayeredWindow来实现窗体的颜色透明.但是一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息. UpdateLayeredWindow(hw…
这里我们基于atlwin定义的窗口类SampleWindow继承自CWindowImpl(定义见atlwin.h),并注册了WM_PAINT消息处理函数OnPaint,注意,我们在OnPaint函数中并没有直接处理WM_PAINT消息,而是直接返回了FALSE. { public: SampleWindow(): DECLARE_WND_SUPERCLASS(_T("SampleWindow"), NULL) BEGIN_MSG_MAP(SampleWindow) MESSAGE_HA…
写在属于自己的体会,哪怕只是一点点,也是真的懂了.否则有那么多书,如果只是不过脑子的学一遍看一遍,又有谁真的掌握了这些知识呢? 这样你或许就明白了为什么不能直接用SendMessage和PostMessage发送WM_PAINT的原因:由于没有invalidate,系统认为窗口没有更新的必要,于是就对发来的WM_PAINT消息不理不睬.解决方案就是——我们自己invalidate!相关的API就是InvalidateRect()和InvalidateRgn(). 还想说一下Invalidate和…
-------------------- TWinControl收到WM_Paint消息(以后找个例子)-------------------- 1. 消息函数 TWinControl.WMPaint (默认不是双缓冲)2.1 如果没有csCustomPaint状态,并且没有子控件,那么执行inherited,也就是寻找消息索引函数,以及TWinControl.DefaultHandler做进一步处理,后面怎么样不清楚.比如TButton就是继承自它的,有空做实验仔细看看.不过鉴于WM_Pain…