窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)相关的知识,希望对你有一定的参考价值。

核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景。通过TImage组件也可以实现,但是重写WM_ERASEBKGND消息的效率更高一些,所以还是推荐使用这种方法。

(2)声明重绘背景消息响应函数

void fastcall OnWMEraseBkgnd(TWMEraseBkgnd& Msg); 


(3)添加消息映射

BEGIN_MESSAGE_MAP
//拦截重画背景的事件
MESSAGE_HANDLER(WM_ERASEBKGND,TWMEraseBkgnd,OnWMEraseBkgnd); 
END_MESSAGE_MAP(TForm);


(4)编写自绘背景消息响应函数的代码

复制代码
void fastcall TFormMain::OnWMEraseBkgnd(TWMEraseBkgnd& Msg)
{
    //重画背景
    TCanvas* canvas = new TCanvas;
    canvas->Handle = Msg.DC;
    int cx = ClientWidth/bmpFormBK->Width + 1;
    int cy = ClientHeight/bmpFormBK->Height + 1;
    for (int i=0; i<cy; i++)
    for (int j=0; j<cx; j++)
    {
        canvas->Draw(j*bmpFormBK->Width, i*bmpFormBK->Height,bmpFormBK); Msg.Result = true;
    }
    delete canvas;
}

 

http://www.cnblogs.com/songsu/articles/1336653.html

以上是关于窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)的主要内容,如果未能解决你的问题,请参考以下文章

等待另一个 Windows 进程重绘其主窗口的可靠方法

简单的小重绘

在C#的winform中,如何快速加载窗体,避免控件的背景图片闪烁?

Windows 经典主题上消失的单选按钮

使Print方法在Form_Load事件中起作用,如何对窗体的属性进行设置?

Winform窗体圆角以及描边完美解决方案