2009-06-30 23 views
2

C++を使用してツリービューノードにアイコンを追加します。私は何が起こっているのかなっていない午前、SetResrcID、PMStringはInDesingのAPIであり、アイコンビューは、ツリーのcontrolViewであり、私は、私は私が試したC++を使用してファイルアイコンを取得する方法

を試してみましたが、システムからアイコンを取得したい

PMString ucPath("C:\\path\\to\\file.extension"); 
SHFILEINFO info;  

::SHGetFileInfo(ucPath.GrabTString(), FILE_ATTRIBUTE_NORMAL, &info, sizeof(info), 
    SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON); 

iconView->SetRsrcID((RsrcID) info.hIcon); 
::DestroyIcon(info.hIcon); 

間違っている、誰かが考えている場合は提案してください。ここで

おかげで、 PraveenさんMamdge

答えて

2

が、私は自分のアプリケーションで使用しているどのようなコードで、あなたはビットマップにアイコンを変更する必要があります。

PMString ucPath("C:\\path\\to\\file.extension"); 
SHFILEINFO info;  

::SHGetFileInfo(ucPath.GrabTString(), FILE_ATTRIBUTE_NORMAL, &info, sizeof(info), 
    SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON); 
ICONINFO stIconInfo; 
GetIconInfo(s_sfi.hIcon, &stIconInfo); 
HBITMAP hBmp = stIconInfo.hbmColor; 
DestroyIcon(s_sfi.hIcon) ; 

これを行う最も良い方法は、SHGFI_SYSICONINDEXでシステムアイコンインデックスを使用することです。

2

このようなものは、 ファイルから最初にファイルを抽出します。

SHFILEINFO stFileInfo; 
SHGetFileInfo(file, 
       FILE_ATTRIBUTE_NORMAL, 
       &stFileInfo, 
       sizeof(stFileInfo), 
       SHGFI_ICON | SHGFI_LARGEICON); 

イメージリストに追加し、インデックスを使用してアイコンを設定します。

m_nIndex = m_ilLargeIcons.Add(stFileInfo.hIcon); 
0

これはあなたのコードスニペットで、行ごとを守ってください。

PMString ucPath( "C:\ file.extensionをする\パス\"); SHFILEINFO info;
:: SHGetFileInfo(ucPath.GrabTString()、FILE_ATTRIBUTE_NORMAL、&情報、はsizeof(情報)、 SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_SMALLICON)。

iconView-> SetRsrcID((RsrcID)info.hIcon);

:: DestroyIcon(info.hIcon);

この行の後:iconView->SetRsrcID((RsrcID) info.hIcon);、あなたは保存したアイコンを破壊したDestroyIconを呼び出しました。

関連する問題