首页 > Windows开发 > 详细

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

时间:2018-02-14 10:17:29      阅读:410      评论:0      收藏:0      [点我收藏+]

核心思想:由于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),并自定义方法来实现重绘窗体背景)

原文:https://www.cnblogs.com/findumars/p/8447818.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!