核心思想:由于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);
//拦截重画背景的事件
MESSAGE_HANDLER(WM_ERASEBKGND,TWMEraseBkgnd,OnWMEraseBkgnd);
END_MESSAGE_MAP(TForm);
(4)编写自绘背景消息响应函数的代码
{
//重画背景
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