• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SHGetFileInfoでアイコンが取得できない場合がある)

SHGetFileInfoでアイコンが取得できない場合がある

このQ&Aのポイント
  • VC++にてエクスプローラもどきを作成しています。ファイルアイコンを取得するためにSHGetFileInfoを使用していますが、何度も再描画を行うとshfInfo.hIconがNULLになり、アイコンが表示されません。
  • shfInfo.hIconがNULLになる問題について、SHGetFileInfo関数を呼ぶ際に制約がある可能性があります。
  • 具体的な制約がわかりませんが、再描画を行う際には注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。  リソースリークしているのではないでしょうか。  取り敢えず、使い終わったアイコンのハンドルを削除して見て下さい。  因みに以下で再現出来しました。 SHFILEINFO shfInfo; //取り敢えずノートパッド(メモ帳)のアイコンを取って来る TCHAR szPath[] = _T("C:\\WINNT\\notepad.exe"); for(int i = 0; i < 100000; ++i) { SHGetFileInfo( szPath, NULL, &shfInfo, sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES ); HICON hicon = shfInfo.hIcon; //此れを呼べば大丈夫 //::DestroyIcon(hicon); if(hicon == NULL) { //いずれココに来る } }

lhouse
質問者

お礼

直りました。ありがとうございます。 SHGetFileInfoでも内部でアイコンを作成しているんですね。 とはいえ、CImageListにAddした直後にDestroyIconしても キチンと表示されているのは不可解な気もしますが。。。 Addしているんだから、描画はAddされたアイコンを使うのでは??? Destroyしちゃったら、何を使って描画させてるんだろう???

関連するQ&A