2

CFileDialog(Vistaスタイルが有効)でフォルダービューを設定する標準的な方法はありますか?詳細ビューといくつかのカスタム列を表示しようとしています。

アプリによって作成されたファイルのアプリ固有の情報を表示するWindows7列ハンドラーを実装しました。ただし、エクスプローラーウィンドウまたは共通ファイルダイアログでこれらのカスタム列を表示するには、フォルダービューを手動で[詳細]に設定してから、必要な特定の列を選択する必要があります。

これは正常に機能しますが、目標は、ユーザーがビュースタイルを変更するまで、アプリのファイルセレクターがこれらの列を詳細ビューに自動的に表示することです。

私はこれを行うためのさまざまな方法を調査しましたが、実行可能な解決策は見つかりませんでした。シェルプロパティバッグは、列のタイプと幅、およびビュースタイルを格納しているように見えますが、その多くはバイナリであり、明らかに文書化されていません。バッグのプロパティをコピーすると、表示設定を切り替えることができますが、これは脆弱なようです。

ポインタやその他のヘルプをいただければ幸いです。

4

1 に答える 1

2

ExplorerがVista/Windows7で列ハンドラーをロードするとは思わない。

ビスタファイルダイアログでビュー設定を変更するには:

Check OS version (needs Vista or higher)    
Not sure which event is raised on startup, OnFolderChange maybe?
assuming OnFolderChange is raised, override CFileDialog::OnFolderChange:
call GetIFileSaveDialog/GetIFileOpenDialog to get IFileDialog
//begin undocumented behavior 
QI for IServiceProvider from IFileDialog
QS for SID_SFolderView with IID_IFolderView2
call IFolderView2::SetViewModeAndIconSize
//end undocumented behavior
clean up COM interfaces

または、文書化されていない方法#2を試すことができます

//begin undocumented behavior 
QI for IServiceProvider from IFileDialog
QS for SID_STopLevelBrowser with IID_IShellBrowser
call IShellBrowser::QueryActiveShellView to get IShellView
QI IFolderView2 from IShellView
call IFolderView2::SetViewModeAndIconSize
//end undocumented behavior
clean up COM interfaces
于 2011-08-12T02:07:21.897 に答える