ListView加底圖顯示問題 |
尚未結案
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
|
HomeSound
中階會員 發表:44 回覆:178 積分:94 註冊:2002-08-31 發送簡訊給我 |
ListView1=vsReport狀態下如何加上背景圖片 ***.h private: // User declarations TWndMethod FOriginalProc; void __fastcall ListViewProc(Messages::TMessage &msg); void __fastcall PaintListView(HDC &dc); __fastcall TForm1::~TForm1(); ***.cpp __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { FOriginalProc = ListView1->WindowProc; ListView1->WindowProc = ListViewProc; } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1() { ListView1->WindowProc = FOriginalProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::ListViewProc(Messages::TMessage &msg) { msg.Result = 0; switch(msg.Msg) { case WM_ERASEBKGND: //攔截背景清除訊息(如改變視窗大小時) PaintListView((HDC)msg.WParam); //重繪背景圖 msg.Result = 0; break; case WM_HSCROLL: //攔截橫捲軸改變訊息 case WM_VSCROLL: //攔截直捲軸改變訊息 以下三行會使拖動捲軸時閃爍 //LockWindowUpdate(ListView1->Handle);//鎖住Windows更改重繪 //InvalidateRect (ListView1->Handle, 0, true);//指定Windows重繪區域 //LockWindowUpdate(NULL); //開放Windows更改重繪 FOriginalProc(msg);//繼續ListView1動作消息傳送 break; default: FOriginalProc(msg); break; } } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintListView(HDC &dc) { TRect rect = ListView1->BoundsRect;//指定ListView的範圍 Graphics::TBitmap *MemBitmap = new Graphics::TBitmap; MemBitmap->Width = rect.Right - rect.Left; MemBitmap->Height= rect.Bottom- rect.Top; MemBitmap->LoadFromFile("C:\\Win\\1.bmp"); //加入圖型 ::BitBlt(dc,0,0,MemBitmap->Width, MemBitmap->Height,MemBitmap->Canvas->Handle,0,0,SRCCOPY); delete MemBitmap; // delete the temporary bitmap. } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { ListView_SetTextBkColor(ListView1->Handle,CLR_NONE);//讓ListView文字透明 } //--------------------------------------------------------------------------- void __fastcall TForm1::FormResize(TObject *Sender) { ListView1->Repaint(); //此項不加也可以 }PS:圖要比ListView大 ********另一種--ListView1=vsReport狀態下加背景圖(圖片跟不上SCROLL移動) void __fastcall TfrmMain::ListViewCustomDraw( TCustomListView *Sender, const TRect &ARect, bool &DefaultDraw) { Graphics::TBitmap* mBitmap = new Graphics::TBitmap; mBitmap->LoadFromFile(".\\1.bmp"); if(mBitmap) { Sender->Canvas->Brush->Bitmap = mBitmap; Sender->Canvas->FillRect(Sender->ClientRect); //填滿矩形 Sender->Canvas->Brush->Bitmap = NULL; SetBkColor(Sender->Handle,CLR_NONE); //設Handle的背景為CLR_NONE SetBkMode(Sender->Canvas->Handle,TRANSPARENT); //設文字和背景混合模式為透明 ListView_SetBkColor(Sender->Handle,CLR_NONE); //設圖示背景顏色透明(於vsIcon模式下) ListView_SetTextBkColor(Sender->Handle,CLR_NONE);//設文字背景顏色透明 } delete mBitmap; }--==多看.多學.多聽==--
------
--==多看.多學.多聽==-- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |