OpenFileDialogで一覧、アイコン表示などを制御したい

タグの編集
投稿者 A69  (社会人) 投稿日時 2017/4/9 20:21:47
お世話になります。

OpenFileDialogの件でお伺いいたします。

OpenFileDialogダイアログが表示されたときに
この画面の「その他のオプション」で
詳細、一覧、大アイコン、、などでファイルを表示
できますが、これをプログラムでコントロールする
方法があるでしょうか?

OS:Win7
VB:VB2010

の環境で作業しています。
ご指導のほど、お願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/4/10 11:23:49
OS レベルでは、切り替えるための定数も用意されていますが、利用はお奨めしません。
https://msdn.microsoft.com/ja-jp/library/bb762510.aspx


これを利用するには、COM の IShellFolder インターフェイスを取得し、
IShellFolder.CreateViewObject メソッドで IShellView インターフェイスを得て、
IShellView.CreateViewWindow メソッドの 第二引数に指定する FOLDERSETTINGS 構造体の
ViewMode フィールドに、上記の定数を割り当てて呼び出せば切り替わるかと思いますが、
残念ながら .NET Frarmework の System.Windows.Forms.OpenFileDialog クラスや
API CodePack の Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog クラスには
そのための直接的な方法が用意されていないようなので、かなり面倒な手続きが必要になるでしょう。

[EternalWindows]
http://eternalwindows.jp/shell/shellname/shellname08.html
> IShellFolderを取得し、CreateViewObjectでIShellViewを取得します。 
> 続いて、IShellView::CreateViewWindowを呼び出すために、FOLDERSETTINGS 構造体を初期化します。
> ViewModeはフォルダビューの表示形式であり、FVM_DETAILSを指定すると詳細表示の形式になります。
> FVM_ICONを指定した場合はアイコン表示になり、FVM_THUMBNAILを指定した場合はサムネイル表示になるでしょう。



あるいは、OFN_ENABLEHOOK でコモンダイアログをフックするなどして、
"SHELLDLL_DefView" なウィンドウを捕えて WM_COMMAND を SendMessage する手も
思い当たりますが、いずれにせよ VB からの呼出は お奨めしません。

[MSDN Magazine March 2004]
http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineMarch2004en-us.chm
【C++ Q&A : List View Mode, SetForegroundWindow, and Class Protection】
> The dialog sends a WM_COMMAND message to the SHELLDLL_DefView, with command ID = 0x702c.
> So to change the view to details, all you have to do is send a WM_COMMAND—to the shell window, not the list control:
>  CWnd* pshellwnd = dlg->GetDlgItem(lst2);
>   pshellwnd->SendMessage(WM_COMMAND, ODM_VIEW_DETAIL); // 0x702c


[ファイルを開く -- コモンダイアログの「表示メニュー」を「詳細」で開く]
http://winofsql.jp/VA003334/infoboard_page.php?mid=smalltech&id=050120221448
投稿者 A69  (社会人) 投稿日時 2017/4/10 13:36:26
魔界の仮面弁士さま、
 A69です。ご丁寧なご説明をいただきました。
 ありがとうございます。

断念して、必要あるばあいは、ダイアログ画面
で手動で操作することにします。
投稿者 A69  (社会人) 投稿日時 2017/4/13 21:23:19
ありがとうございました。

解決チェックを忘れていました