ダイアログボックスの複数選択

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ジョン
記事: 9
登録日時: 2006年9月29日(金) 10:01

ダイアログボックスの複数選択

#1 投稿記事 by ジョン »

よろしくお願いします。
選択したファイルが1つの場合は「lpstrFile」にフルパスが格納
されているようですが、複数選択したそれぞれのファイルのフルパスは
下記のコードではうまくメッセージボックスでそれぞれ表示されません。
目的は表示そのものではなく、選択した複数のファイルを任意の場所に
読み書きしたいのですが、この段階でつまずいています。


'OPENFILENAME構造体の初期化
Dim ofn As OPENFILENAME
Dim FileName[MAX_PATH] As Byte,FN1[MAX_PATH] As Byte

FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lpstrInitialDir="D:"
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex" 全てのデータ\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FileName
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle="ファイルの選択"
ofn.Flags=OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"

'「ファイルの選択」ダイアログ ボックスを表示
If GetOpenFileName(ofn)=0 Then Exit Sub
MessageBox(0,FileName,"",MB_OK)
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ダイアログボックスの複数選択

#2 投稿記事 by 7 »

> 選択したファイルが1つの場合は「lpstrFile」にフルパスが格納
> されているようですが、複数選択したそれぞれのファイルのフルパスは
> 下記のコードではうまくメッセージボックスでそれぞれ表示されません。
OFN_EXPLORERフラグが設定されている場合、それぞれNULL文字で区切られ、連続したNULL文字で終わります。
ということです。
ということはファイル名(複数)は以下のような文字列になっているんじゃないでしょうか。

コード: 全て選択

"C:\hoge\hoge.exe\0C:\pika\pika.exe\0E:\foo\foo.exe\0\0"
これをそれぞれ取り出すと。

さてどうやって取り出したものか...。

GetLogicalDriveStrings()という関数で取得できるドライブ名の文字列も前掲した通りで、昔はそれをちゃんと取り出してたんですけど、やり方忘れてしまいました...。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

Re: ダイアログボックスの複数選択

#3 投稿記事 by hira »

こういう感じで取り出してみてはいかがでしょう。(FileNameに複数のファイル名が入っているとする)

コード: 全て選択

Dim p As *Byte
p=FileName
While p[0]<>0
	'ここでpはファイル名の1つを示す。
	MessageBox(0,p,"",MB_OK) '例

	'次のファイル名
	p=p+lstrlen(p)+1
Wend
返信する