2011-08-11 4 views
1

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

私のアプリケーションで作成されたファイルのアプリケーション固有の情報を表示するWindows 7の列ハンドラを実装しました。しかし、エクスプローラウィンドウや一般的なファイルダイアログでこれらのカスタム列を表示するには、手動でフォルダビューをDetailsに設定してから、必要な特定の列を選択する必要があります。

これはうまくいきますが、目的は、ビュースタイルを変更するまで、詳細ビューにこれらの列を自動的に表示することです。

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

すべてのポインタやその他のヘルプは非常に高く評価されます。

答えて

1

私はVistaのファイルダイアログに表示設定を変更するには7.

ビスタ/ Windowsのエクスプローラをロードし、カラムハンドラを考えていない:

また
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 
+0

私はそれをカラムハンドラと呼んでいますが、プロパティシステムのCOMインターフェイスを使って、カスタムカラムとそのカラムに入るデータを表示します。これはVistaと7で正常に動作します(XPでは、以前のIColumnProviderを実装する必要がありますが、これは別の話です)。ありがとう、私はそのアプローチを調査します。 – cue

+0

私はあなたに投票するのに十分な運命があることを望みます。最終結果は、IFileDialog - > IServiceProviderのIFolderView2を使用してビューを詳細モードに変更しました。その後、IServiceProvider - > IShellBrowser - > IShellViewのIColumnManagerを使用して、カスタム列のプロパティストアプロペラキーを使用して列を設定することができました。 ありがとうございました。 – cue

関連する問題