メッセージボックスの作成(V)          <TOP>


APIでメッセージボックスを作成します。ボタン種・アイコンをチェックして作成ボタンをクリックします。

GetLogicalDrives 有効なドライブの情報を取得
MessageBoxEx メッセージボックスの作成、表示、操作を行う
MessageBoxIndirect メッセージボックスの作成、表示、操作を行う
PostQuitMessage アプリケーションを停止するキューをWindowsに送る
GetCommandLine 現在のプロセスのコマンドライン文字列へのポインタを取得
lstrlen 指定された文字列のバイトまたは文字の長さを返す
CopyMemory ある位置から別の位置にメモリブロックを移動
 

 

'================================================================
'= メッセージボックスの作成(V)
'=    (MessageBoxEx.bas)
'================================================================
#include "Windows.bi"

#define MB_ICONASTERISK &H40            'メッセージ(情報)
#define MB_ICONEXCLAMATION &H30         '感嘆符アイコン
#define MAX_PATH = 260

Type MSGBOXPARAMS
    cbSize             As Long
    hwndOwner          As Long
    hInstance          As Long
    lpszText           As Long
    lpszCaption        As Long
    dwStyle            As Long
    lpszIcon           As Long
    dwContextHelpId    As Long
    lpfnMsgBoxCallback As Long
    dwLanguageId       As Long
End Type

' 有効なドライブの情報を取得。ディスクの挿入の有無やネットワークに接続されているかなどは関係なく、現在割り当てられている全てのドライブ一覧を返す
Declare Function Api_GetLogicalDrives& Lib "Kernel32" Alias "GetLogicalDrives" ()

' メッセージボックスの作成、表示、操作を行う
Declare Function Api_MessageBoxEx& Lib "user32" Alias "MessageBoxExA" (ByVal hWnd&, ByVal lpText$, ByVal lpCaption$, ByVal uType&, ByVal wLanguageId&)

' メッセージボックスの作成、表示、操作を行う
Declare Function Api_MessageBoxIndirect& Lib "user32" Alias "MessageBoxIndirectA" (lpMsgBoxParams As MSGBOXPARAMS)

' アプリケーションを停止するキューをWindowsに送る
Declare Sub Api_PostQuitMessage Lib "user32" Alias "PostQuitMessage" (ByVal nExitCode&)

' 現在のプロセスのコマンドライン文字列へのポインタを取得
Declare Function Api_GetCommandLine& Lib "kernel32" Alias "GetCommandLineA" ()

' 指定された文字列のバイトまたは文字の長さを返す
Declare Function Api_lstrlen& Lib "Kernel32" Alias "lstrlenA" (ByVal lpString&)

' ある位置から別の位置にメモリブロックを移動
Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length&)

Var Shared Button1 As Object

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

'================================================================
'=
'================================================================
Declare Function GetCommLine() As String
Function GetCommLine() As String
    Var SLen As Long
    Var RetStr As Long
    Var Buffer As String

    'コマンドラインを含むStringのポインタを取得
    RetStr = Api_GetCommandLine

    '文字列の長さを取得
    SLen = Api_lstrlen(RetStr)

    If SLen > 0 Then
        'バッファを初期化
        Buffer = Space$(SLen)

        'バッファにコピー
        CopyMemory Buffer, ByVal RetStr, SLen

        GetCommLine = Buffer
    End If
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var mbp As MSGBOXPARAMS
    Var LDs As Long
    Var Cnt As Long
    Var sDrives As String
    Var Ret As Long

    '利用可能なドライブを取得
    LDs = Api_GetLogicalDrives

    sDrives = "利用可能なドライブ:"
    For Cnt = 0 To 25
        If (LDs And 2 ^ Cnt) <> 0 Then
            sDrives = sDrives & " " & Chr$(65 + Cnt)
        End If
    Next Cnt

    'コマンドラインを表示
    Ret = Api_MessageBoxEx(GethWnd, "コマンドライン:" & GetCommLine & Chr$(13, 10) & Chr$(13, 10) & "このメッセージボックスはAPI関数 MessageBoxEx で作成しました。", "コマンドライン", MB_ICONEXCLAMATION, 0)

    '構造体サイズを設定
    mbp.cbSize = Len(mbp)

    'アイコンスタイルを設定
    mbp.dwStyle = MB_ICONASTERISK

    'オーナーウィンドウを設定
    mbp.hwndOwner = GethWnd

    'テキストを設定
    mbp.lpszText = StrAdr(sDrives & Chr$(13, 10) & Chr$(13, 10) & "このメッセージボックスはAPI関数 MessageBoxIndirect で作成しました。" & Chr$(0))

    'キャプションを設定
    mbp.lpszCaption = StrAdr("利用可能なドライブ" & Chr$(0))

    'メッセージボックスを表示
    Ret = Api_MessageBoxIndirect(mbp)

    'アプリケーションの終了
'    Ret = Api_PostQuitMessage(0)
End Sub

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