goo blog サービス終了のお知らせ 
goo

フォルダ選択ダイアログ

◆一覧リスト
HSP Ver3.0
HSP Ver2.61
ブログ関連
その他
★人気blogランキング

「フォルダ選択ダイアログ」

※HSPでは既にCOMの初期化はされている様なので省略しています。
以下、MSDNより
You must initialize Component Object Model (COM) using CoInitializeEx
with the COINIT_APARTMENTTHREADED flag set in the dwCoInit parameter prior to calling SHBrowseForFolder. You can also use CoInitialize or OleInitialize, which always use apartment threading.

◆作成方法
1.「SHBrowseForFolder」関数でITEMIDLIST構造体ポインタの取得
第一引数 BROWSEINFO構造体ポインタ
4byte×8=32byte
typedef struct _browseinfo {
HWND hwndOwner;//親ウィンドウ
LPCITEMIDLIST pidlRoot;//最初に選択されるITEMIDLISTポインタ
LPTSTR pszDisplayName;//関数成功時、選択フォルダ名代入
LPCTSTR lpszTitle;//タイトルバー下の説明文
UINT ulFlags;//フォルダ表示フラグ
BFFCALLBACK lpfn;//コールバック
LPARAM lParam;//コールバック引数
int iImage;//選択フォルダのイメージリストインデックス
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
ulFlags:
BIF_BROWSEFORCOMPUTER(0x1000):ネットワーク表示
BIF_BROWSEFORPRINTER(0x2000):プリンタ選択
BIF_BROWSEINCLUDEFILES(0x4000):ファイル表示
BIF_BROWSEINCLUDEURLS(0x0080):URLを表示
BIF_DONTGOBELOWDOMAIN(0x0002):ネットワークを表示しない
BIF_EDITBOX(0x0010):フォルダ上部にEDIT表示(コピー可能)
BIF_NEWDIALOGSTYLE(0x0040):新しいダイアログ(新規作成フォルダ可)
BIF_RETURNONLYFSDIRS(0x0001):フォルダ選択

2.1のITEMIDLISTから「SHGetPathFromIDList」関数にてパス取得
第一引数 ITEMIDLIST構造体ポインタ
第二引数 パスを受け取る文字列ポインタ

3.「CoTaskMemFree」関数で、1のITEMIDLISTの解放
第一引数 ITEMIDLIST構造体ポインタ

◆サンプル
サンプル ソースコード
//////////////////////////////////////////////////////////////////
//関数の登録
	#uselib "shell32.dll"
	#cfunc SHBrowseForFolder "SHBrowseForFolder" int
	#func SHGetPathFromIDList "SHGetPathFromIDList" int,int

	#uselib "ole32.dll"
	#func CoTaskMemFree "CoTaskMemFree" int

//////////////////////////////////////////////////////////////////
//メインウィンドウ
	screen 0,200,20
	titlename="フォルダ選択"
	title titlename
	pos 0,0:objsize 200,20:button gosub titlename,*GetFolder
stop

//////////////////////////////////////////////////////////////////
//フォルダ選択ダイアログの表示
*GetFolder
	dim ret
	dim prm,16
	sdim SubTitle,  260
	sdim FolderName,260
	sdim FolderPath,260

	//////////////////////////////////////////////////////////
	//ITEMIDLIST構造体のポインタ取得
	SubTitle="保存するフォルダを選択してください"
	prm(0)=hwnd,0,varptr(FolderName),varptr(SubTitle)
	prm(4)=0x01,0,0,0
	ret=SHBrowseForFolder(varptr(prm))
	if ret==0:return 0

	//////////////////////////////////////////////////////////
	//ITEMIDLISTからパスの取得
	SHGetPathFromIDList ret,varptr(FolderPath)

	//////////////////////////////////////////////////////////
	//ITEMIDLIST構造体を解放
	CoTaskMemFree ret
	dialog folderpath
return
コメント ( 0 ) | Trackback ( 0 )
« PEフォーマッ... タイトルバー... »
 
コメント(10/1 コメント投稿終了予定)
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。