1. 程式人生 > >窗體背景的繪制(Windows窗體每次都會重繪其窗體背景,所以我們可以通過攔截窗體重繪背景的消息(WM_ERASEBKGND),並自定義方法來實現重繪窗體背景)

窗體背景的繪制(Windows窗體每次都會重繪其窗體背景,所以我們可以通過攔截窗體重繪背景的消息(WM_ERASEBKGND),並自定義方法來實現重繪窗體背景)

height com call 消息響應 int idt http msg mes

核心思想:由於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),並自定義方法來實現重繪窗體背景)