松鼠的博客

导航

统计

窗体背景的绘制

核心思想:由于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;
}
复制代码

posted on   Xproer-松鼠  阅读(380)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示