码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2018-02-14 10:33:49      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:pen   重写   too   www.   .com   height   ali   ras   ken   

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

标签:pen   重写   too   www.   .com   height   ali   ras   ken   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!