フォルダ選択ダイアログを表示するため以前はSHBrowseForFolderを使っていたんだけど、MSDNによるとVista以降はIFileDialogを使うことが推奨されるらしい。
そこで、IFileDialogを使うよう、以下の通り実装した。
(2018/06/23追記:IFileDialogはWindowsVista以降でしか使えない。そのため、stdafx.hのWINVER等を0x600以上にする必要がある。後述。また、マルチバイト文字セットでは操作できない。Unicode必要。)
gistbfbc99d6b26024ca291f41e586f96900
なお、pDialog->Show(NULL)としているが、NULLのかわりに呼び出し元のhWndを指定してもよいようだ(MSDNより)。また、IFileDialogのインスタンスを示すCLSIDは存在しない?ようで、CoCreateInstanceではCLSID_FileOpenDialogを引数に指定している。
取得したインスタンスや、呼び出し先関数が確保したメモリは忘れずに開放すること。
2018/06/23追記:
下記エラーが出る場合は、stdafx.hに記述した動作OS情報が間違っている可能性があります。
・__uuidofのオペランドには__declspec(uuid('...'))が指定されているクラス型または列挙型を使用する必要があります
・error C2787: 'IFileDialog': このオブジェクトに関連付けられた GUID はありません。
解決方法は下記。解決方法調べたら、自分のページが引っかかった・・・過去にも同じことで困ったのか、自分・・・。