請教如何利用Owner Draw改變ListView上的小圖示 |
尚未結案
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
首先感謝版主大哥的回應!
不過小弟因為道行不夠,可能需要再淺顯詳細的解釋…
因為我是以dsfSystemTreeView(下載自DFS)來讓dfsSystemListView中可顯示出TreeView中選到的目錄內容檔案,但是我不知道要如何讓ListView中原本顯示檔案ICON的圖示替換成我要的此目錄中所有檔案的縮圖(當然必需是圖形檔),此間不知道怎麼知道dfsSystemTreeView現在到底選到那一個目錄了,又如何以Owner Draw設為true的方式來取代ICON呢?或者是有其它的方法呢?
如果版主大哥或版上高手有空的話,請大家撥冗幫一下,謝謝!
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
感謝諸位前輩們的回應,目前我已有一點進展,但仍有問題,我的問題有二:
一是縮圖並不是原始圖的縮圖,而是只有一小部分的截取;
二是執行速度有些慢,並容易出現當掉的現象
能否請前輩們撥冗幫我看一下以下的程式缺點,先謝謝大家啦! 我的主要程式碼如下:
void __fastcall TForm1::FormActivate(TObject *Sender)
{
WIN32_FIND_DATA f;
HANDLE h;
char buf[255];
TListItem *p;
if (RadioButton1->Checked) ListView1->ViewStyle=vsSmallIcon;
if (RadioButton2->Checked) ListView1->ViewStyle=vsIcon;
if (RadioButton3->Checked) ListView1->ViewStyle=vsList;
if (RadioButton4->Checked) ListView1->ViewStyle=vsReport;
ImageList1->Clear();
ListView1->Items->Clear();
sprintf(buf,"%s%s", DirectoryListBox1->Directory.c_str(), "\\*.bmp");
h=FindFirstFile(buf, &f);
if (h != INVALID_HANDLE_VALUE)
{
Graphics::TBitmap *tmpBmp = new Graphics::TBitmap();
Graphics::TBitmap *DestBmp = new Graphics::TBitmap();
DestBmp->Width=180;
DestBmp->Height=120;
tmpBmp->LoadFromFile(f.cFileName);
tmpBmp->Canvas->StretchDraw(Rect(1,1,DestBmp->Width,DestBmp->Height),tmpBmp);
p=ListView1->Items->Add(); // 新增一筆空資料到ListView內
p->ImageIndex = ImageList1->Add(DestBmp,NULL);
p->Caption=f.cFileName; // 先指定檔案名稱給第一個欄位
sprintf(buf,"%d", f.nFileSizeLow); // 再把檔案大小轉成字串
p->SubItems->Add(buf); // 將字串加到第二個欄位
delete DestBmp;
delete tmpBmp; while (FindNextFile(h,&f))
{
Graphics::TBitmap *tmpBmp = new Graphics::TBitmap();
Graphics::TBitmap *DestBmp = new Graphics::TBitmap();
DestBmp->Width=180;
DestBmp->Height=120;
tmpBmp->LoadFromFile(f.cFileName);
DestBmp->Canvas->StretchDraw(Rect(1,1,tmpBmp->Width,tmpBmp->Height),tmpBmp);
p=ListView1->Items->Add();
p->ImageIndex = ImageList1->Add(DestBmp,NULL);
p->Caption=f.cFileName;
sprintf(buf,"%d", f.nFileSizeLow);
p->SubItems->Add(buf);
delete DestBmp;
delete tmpBmp;
}
}
}
|
help
一般會員 發表:12 回覆:54 積分:13 註冊:2002-06-14 發送簡訊給我 |
大哥,
您這行寫錯啦:
tmpBmp->LoadFromFile(f.cFileName);
tmpBmp->Canvas->StretchDraw(Rect(1,1,DestBmp->Width,DestBmp->Height),tmpBmp);//錯誤啦!!!! p=ListView1->Items->Add(); // 新增一筆空資料到ListView內 是不是該改成
DestBmp->Canvas->StretchDraw(Rect(1,1,DestBmp->Width,DestBmp->Height),tmpBmp); 因為你是要把tmpBmp的內容畫到DestBmp去啊! ^_^ gogowin
------
gogowin |
help
一般會員 發表:12 回覆:54 積分:13 註冊:2002-06-14 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
help
一般會員 發表:12 回覆:54 積分:13 註冊:2002-06-14 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |