為什麼無法抓到Desktop的圖示? |
尚未結案
|
look4help
一般會員 發表:9 回覆:8 積分:3 註冊:2005-07-26 發送簡訊給我 |
各位好,一個問題請教各位。因為我想要利用TTreeView撰寫一個類似檔案總管的畫面,之前參考了不少程式範例。我抄了一個函式內容如下,若是取我的電腦,或是我的最愛等資料夾,都可以正確顯示圖示,唯讀「桌面」無法正常顯示,每次都顯示一支手的圖樣,請問是哪裏出現問題?請高手指點一下,拜託拜託,謝謝~~~~ < class="code"> //取得Windows系統預設的圖示
extern int GetTreeViewShellImage(char* str, bool Open)
{
參數str -->為資料夾或檔案之路徑,我也有看過傳入機碼,
例如"::{{20D04FE0-3AEA-1069-A2D8-08002B30309D}}",可以正確得到我的電腦的圖示。
//抓取某個Node的Icon
SHFILEINFO FileInfo;
char afterReplace_Str;
int Flags;
int Result; memset(&FileInfo, 0, sizeof(FileInfo));
Flags = SHGFI_SYSICONINDEX | SHGFI_ICON; if(Open) Flags = Flags | SHGFI_OPENICON;
Flags = Flags | SHGFI_SMALLICON;
SHGetFileInfo(str, 0, &FileInfo, sizeof(FileInfo), Flags);
//ps str=不知道值該為如何。若是用C:\Documents and Settings\Administrator\桌面,Show出來
也只是一個資料夾的圖示。但除此路徑之外,我不曉得該放什麼路徑才能正確顯示桌面圖示。
Result = FileInfo.iIcon;
return Result;
} //按下按鈕時,取圖示,並展開第一個節點
void __fastcall TForm1::Button1Click(TObject *Sender)
{ int ImageIndex, SelectedIndex;
TTreeNode *TreeView_Main_Root; AnsiString SpecialFolderPath;
SpecialFolderPath = "C:\Documents and Settings\Administrator\桌面"; ............ ImageIndex = GetTreeViewShellImage(SpecialFolderPath.c_str(), false);
SelectedIndex = GetTreeViewShellImage(SpecialFolderPath.c_str(), true);
TreeView_Main_Root = TreeView_Main->Items->AddChild(NULL, "桌面");
TreeView_Main_Root->ImageIndex = ImageIndex;
TreeView_Main_Root->SelectedIndex = SelectedIndex; ..... } 發表人 - look4help 於 2005/09/08 00:15:02
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
look4help 您好: 系統目錄圖示可以使用 ItemList (使用 LPITEMIDLIST) 來配合 SHGetFileInfo() 取得,將欲取得圖示的系統目錄 ID ("桌面" 的 ID 是 0) 代入 SHGetSpecialFolderLocation() 可獲得 ItemIdList 的資訊,接著以 SHGetDesktopFolder() 偵測是否能正確取得系統目錄的資訊,可以的話就將前述的 ItemIdList 代入 SHGetFileInfo() 來取得圖示了。 7 天天敲鍵盤 v 時時按滑鼠 8
|
bugmans
高階會員 發表:95 回覆:322 積分:188 註冊:2003-04-12 發送簡訊給我 |
提供另一種方法
http://www.binbin.net/messages/qa_win_xp/0057.htm
IconFile=explorer.exe,3 在explorer.exe檔案中第四個icon(從0開始數)
範例程式http://delphi.ktop.com.tw/topic.php?topic_id=25911
TIcon* icon = new TIcon; USHORT idx = 3; icon->Handle = ExtractAssociatedIcon(HInstance,"C:\\WINNT\\explorer.exe",&idx); //ImageList1->AddIcon(icon); // ImageList1->InsertIcon(1,icon); // Image1->Picture->Assign(icon); Form1->Canvas->Draw(10,10,icon); delete icon; icon=NULL; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |