全然更新しないブログ
HSPメモ帳
フォルダ選択ダイアログ
「フォルダ選択ダイアログ」
※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 コメント投稿終了予定) |
コメントはありません。 |
![]() |
コメントを投稿する |