「ファイルを開く」ダイアログを表示          <TOP>


GetOpenFileName 「ファイルを開く」ダイアログを表示 
lstrcat ある文字列の末尾に別の文字列を結合 

 
'================================================================
'= 「ファイルを開く」ダイアログを表示
'=    (GetOpenFileName.bas)
'================================================================
#include "Windows.bi"

Type OPENFILENAME
    lStructSize       As Long      '構造体のサイズをバイト単位で指定
    hwndOwner         As Long      'ダイアログボックスを所有するウィンドウへのハンドルを指定
    hInstance         As Long      'メモリオブジェクトへのハンドルを指定
    lpstrFilter       As Long      '任意の数のNULL文字で終わる文字列のペアを保持するバッファへのポインタを指定
    lpstrCustomFilter As Long      'ユーザーによって選択されたファイル フィルター文字列のペアが保存される
    nMaxCustFilter    As Long      'lpstrCustomFilterメンバのバッファ サイズを指定
    nFilterIndex      As Long      'フィルターの初期インデックスを指定
    lpstrFile         As Long      '文字列バッファを指定
    nMaxFile          As Long      'lpstrFileメンバのバッファ サイズを指定
    lpstrFileTitle    As Long      '選択されたファイルの名前、および拡張子を保存するための文字列バッファを指定
    nMaxFileTitle     As Long      'lpstrFileTitle メンバのバッファ サイズを指定
    lpstrInitialDir   As Long      '初期ディレクトリのパスを指定
    lpstrTitle        As Long      'ダイアログボックスのタイトルバーに表示する文字列を指定
    Flags             As Long      'イアログボックスの初期化フラグを、「OFN_・・・・」の定数を組み合わせて指定
    nFileOffset       As Integer   'lpstrFileメンバが示すパス内の、ファイル名の位置がバッファの先頭から何バイト目であるかを示す
    nFileExtension    As Integer   'lpstrFileメンバが示すパス内の、拡張子の位置がバッファの先頭から何バイト目であるかを示す
    lpstrDefExt       As Long      'デフォルト拡張子の文字列を示す
    lCustData         As Long      'lpfnHookメンバが示すフック プロシージャへ渡すデータを指定
    lpfnHook          As Long      'フック プロシージャへのポインタを指定
    lpTemplateName    As Long      'hInstanceメンバが示すモジュール内にあるダイアログ テンプレートを指定
End Type

' 「ファイルを開く」ダイアログボックスを作成
Declare Function Api_GetOpenFileName& Lib "comdlg32" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME)

' ある文字列の末尾に別の文字列を結合
Declare Function Api_lstrcat& Lib "kernel32" Alias "lstrcatA" (ByVal lpString1$, ByVal lpString2$)

Var Shared Button1 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var ofn As OPENFILENAME
    Var Ret As Long

    ofn.lStructSize = Len(ofn)
    ofn.hwndOwner = GethWnd
    ofn.hInstance = GethInst
    ofn.lpstrFilter = Api_lstrcat("テキストファイル (*.txt)" & Chr$(0) & "*.txt" & Chr$(0) & "全てのファイル (*.*)" & Chr$(0) & "*.*" & Chr$(0), "")
    ofn.lpstrFile = Api_lstrcat(Space$(254) & Chr$(0), "")
    ofn.nMaxFile = 255
    ofn.lpstrFileTitle = StrAdr(Space$(254) & Chr$(0))
    ofn.nMaxFileTitle = 255
    ofn.lpstrInitialDir = StrAdr("C:\" & Chr$(0))
    ofn.lpstrTitle = StrAdr("ファイルを開く" & Chr$(0))
    ofn.flags = 0

    Ret = Api_GetOpenFileName(ofn)
    If Ret = 0 Then
        A% = MessageBox("", "「キャンセル」が押されました!", 0, 2)
    Else
        A% = MessageBox("", "「開く」が押されました!", 0, 2)
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End