by 7 » 2007年2月27日(火) 21:44
> ボタンで「参照」というボタンを作って「フォルダの参照」を出すところまでは
> 出来たのですが、選択してOKをクリックしたときにエディトボックスにフォルダのパスが出るようにしたいのですが分かりません。
以下のコードを参考にしたんですよね?
Win32プログラミング講座 ~ Step14. DLLを作る ~ [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Function Export GetFolderDlg(hWnd As Long, lpFolder As BytePtr) As Long
Dim bi As BROWSEINFO
Dim pidlBrowse As VoidPtr
'BROWSEINFO構造体の初期化
FillMemory(VarPtr(bi),Len(bi),0)
bi.hwndOwner=hWnd
bi.lpszTitle="フォルダの選択"
bi.ulFlags=BIF_RETURNONLYFSDIRS
'「フォルダの参照」ダイアログボックスを表示
pidlBrowse=SHBrowseForFolder(bi)
If pidlBrowse Then
'フォルダへのパスを取得(lpFolderポインタが示すバッファにコピー)
SHGetPathFromIDList(pidlBrowse, lpFolder)
GetFolderDlg=1
Else
GetFolderDlg=0
End If
End Function
この関数はフォルダが選択された場合、
1 が返り、フォルダのパスがBytePtr型変数
lpFolderに格納されます。
エディットボックスに文字列を設定するにはSetWindowText()関数やSetDlgItemText()関数を使います。
コード: 全て選択
Dim lpFolder As BytePtr
Dim hEdit As HWND
' エディットボックスのハンドルを取得
hEdit=GetDlgItem(hMainWnd,EditBox1)
' フォルダのパスを取得した場合、エディットボックスにパスを設定
If GetFolderDlg(hMainWnd,lpFolder) Then
' SetWindowText()関数を使う場合
SetWindowText(hEdit,lpFolder)
' SetDlgItemText()関数を場合
SetDlgItemText(hMainWnd,EditBox1,lpFolder)
End If
> ボタンで「参照」というボタンを作って「フォルダの参照」を出すところまでは
> 出来たのですが、選択してOKをクリックしたときにエディトボックスにフォルダのパスが出るようにしたいのですが分かりません。
以下のコードを参考にしたんですよね?
[hide=Win32プログラミング講座 ~ Step14. DLLを作る ~][code]Function Export GetFolderDlg(hWnd As Long, lpFolder As BytePtr) As Long
Dim bi As BROWSEINFO
Dim pidlBrowse As VoidPtr
'BROWSEINFO構造体の初期化
FillMemory(VarPtr(bi),Len(bi),0)
bi.hwndOwner=hWnd
bi.lpszTitle="フォルダの選択"
bi.ulFlags=BIF_RETURNONLYFSDIRS
'「フォルダの参照」ダイアログボックスを表示
pidlBrowse=SHBrowseForFolder(bi)
If pidlBrowse Then
'フォルダへのパスを取得(lpFolderポインタが示すバッファにコピー)
SHGetPathFromIDList(pidlBrowse, lpFolder)
GetFolderDlg=1
Else
GetFolderDlg=0
End If
End Function[/code][/hide]
この関数はフォルダが選択された場合、[b]1[/b] が返り、フォルダのパスがBytePtr型変数[b]lpFolder[/b]に格納されます。
エディットボックスに文字列を設定するにはSetWindowText()関数やSetDlgItemText()関数を使います。
[code]Dim lpFolder As BytePtr
Dim hEdit As HWND
' エディットボックスのハンドルを取得
hEdit=GetDlgItem(hMainWnd,EditBox1)
' フォルダのパスを取得した場合、エディットボックスにパスを設定
If GetFolderDlg(hMainWnd,lpFolder) Then
' SetWindowText()関数を使う場合
SetWindowText(hEdit,lpFolder)
' SetDlgItemText()関数を場合
SetDlgItemText(hMainWnd,EditBox1,lpFolder)
End If[/code]