コモンダイアログの「ファイルの種類」を変更したときの動作


ixy  2005-08-09 19:11:27  No: 58562

VC++.NET2003の.NET Frameworkを使用しています。
コモンダイアログOpenFileDialogでフィルタにテキストファイルとすべての拡張子をセットしテキストファイルをデフォルトにします。
実行して「ファイルの種類」をすべてのファイルに変更すると、ファイルリストに何も表示されなくなります。
「開く」ボタンを押下するとファイルリストにすべてのファイルが表示されるようになります。
「ファイルの種類」を変更したとき、すぐに該当ファイルのリストを表示するようにしたいのですが、解決方法などご存知でしたらご教授願います。


雪花火  2005-09-27 01:16:20  No: 58563

OPENFILENAME ofn;  であるものとして、\0が各内容のくぎりです
後は、ファイルを検索する方法と同じです。
失敗例
ofn.lpstrFilter  = "プログラム言語ファイル(*.cpp)\0*.cpp\0"
                   "ファイル(*.txt)\0.";
失敗例                 
ofn.lpstrFilter  = "プログラム言語ファイル(*.cpp)\0*.cpp\0"
                   "ファイル(*.txt)\0.*";                   
                   
この方法で問題ないとおもいます。             
ofn.lpstrFilter  = "プログラム言語ファイル(*.cpp)\0*.cpp\0"
                   "ファイル(*.txt)\0*."; 

また、メッセージフックによる変更を希望していなら、ファイルの種類が表示してあるコンポボックスのID は1136です。


Blue  2005-09-27 01:32:23  No: 58564

> NET Frameworkを使用しています。
なのでAPIのOpenFileDialogとは違うのでは?

System::Windows::Forms::OpenFileDialogクラス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsopenfiledialogclasstopic.asp


Blue  2005-09-27 01:34:18  No: 58565

> なのでAPIのOpenFileDialogとは違うのでは?
なんてAPIなかったです。
GetOpenFileNameですよね、OPENFILENAME構造体を引数に使うのは。


雪花火  2005-09-28 15:21:57  No: 58566

Blueさんのいうとうりです、また上の文章で"る"がぬけてました。
OpenFileDialog*  ofdとして、前の文章の\0を|にかえて判断してください。
ofd->Filter = S"txt files (*.txt)|*.txt|All files (*.*)|*.*" ;


RAPT  2005-09-29 06:22:20  No: 58567

> "txt files (*.txt)|*.txt|All files (*.*)|*.*" 
"txt files (*.txt)|*.txt|All files (*.*)|*.*||" 
ではありませんか?
# .NETは知らないけど、その辺の仕様は踏襲していると思うのですが。
# '\0'が区切り文字にしても、最後は"\0\0"で終わる必要があるはずです。


Blue  2005-09-29 07:04:34  No: 58568

MSDNでFileDialog.Filter プロパティを確認してみると、
C#、VB.NETの具体例しか載っていませんが、
> "txt files (*.txt)|*.txt|All files (*.*)|*.*"
でいいようです。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsfiledialogclassfiltertopic.asp

ちなみに、
> # '\0'が区切り文字にしても、最後は"\0\0"で終わる必要があるはずです。
char s[] = "\0";
で、変数宣言時に初期化すると、
s[0]='\0'
s[1]='\0'
になります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加