メッセージボックス

スポンサーリンク

メッセージボックスを表示し,選択されたボタンを判別するプログラムを作ります。

作例-1 作例-2

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpszCmdLine, int nCmdShow)
{
    int id;

    id = MessageBox(NULL, TEXT("ボタンを押して下さい。"),
        TEXT(""), MB_OKCANCEL | MB_ICONQUESTION);

    switch (id)
    {
    case IDOK:
        MessageBox(NULL, TEXT("[OK] が押されました。"),
            TEXT("結果"), MB_ICONINFORMATION);
        break;
    case IDCANCEL:
        MessageBox(NULL, TEXT("[キャンセル] が押されました。"),
            TEXT("結果"), MB_ICONINFORMATION);
        break;
    }

    return 0;
}

MessageBox 関数

MessageBox 関数はメッセージボックスを表示する関数です。

MessageBox  [MSDN]



int MessageBox(
    HWND hWnd,          // オーナーウィンドウへのハンドル
    LPCTSTR lpText,     // テキスト
    LPCTSTR lpCaption,  // キャプション
    UINT uType          // メッセージボックスのタイプ
);


uType

値 (ボタン)説明
MB_OKOK (既定)
MB_OKCANCELOK,キャンセル
MB_ABORTRETRYIGNORE中止,再試行,無視
MB_YESNOCANCELはい,いいえ,キャンセル
MB_YESNOはい,いいえ
MB_RETRYCANCEL再試行,キャンセル
MB_CANCELTRYCONTINUEキャンセル,再実行,継続
値 (アイコン)説明
MB_ICONHAND
MB_ICONSTOP
MB_ICONERROR
エラー
MB_ICONQUESTION 問合せ
MB_ICONEXCLAMATION
MB_ICONWARNING
警告
MB_ICONASTERISK
MB_ICONINFORNATION
情報
他に,既定のボタン,モーダル状態などのオプションを指定することもできます (MSDN 参照)。
返り値
どのボタンが選択されたかを表す値が返ります。
説明
IDOKOK
IDCANCELキャンセル
IDABORT中止
IDRETRY再試行
IDIGNORE無視
IDYESはい
IDNOいいえ
IDTRYAGAIN再実行
IDCONTINUE継続


MessageBox  MessageBoxEx  [MSDN] 

1 hWnd 
 NULL 

23

4 uType 
winuser.h 使
// ボタンの種類
#define MB_OK                       0x00000000L  // OK
#define MB_OKCANCEL                 0x00000001L  // OK, キャンセル
#define MB_ABORTRETRYIGNORE         0x00000002L  // 中止,再試行,無視
#define MB_YESNOCANCEL              0x00000003L  // はい,いいえ,キャンセル
#define MB_YESNO                    0x00000004L  // はい,いいえ
#define MB_RETRYCANCEL              0x00000005L  // 再試行,キャンセル
#define MB_CANCELTRYCONTINUE        0x00000006L  // キャンセル,再実行,継続

// アイコンの種類
#define MB_ICONHAND                 0x00000010L  // エラー
#define MB_ICONQUESTION             0x00000020L  // 問合せ
#define MB_ICONEXCLAMATION          0x00000030L  // 警告
#define MB_ICONASTERISK             0x00000040L  // 情報

Windows  #define  ( typedef ) 
 MB_ 使 (MB message box )

 uType  | 
 MB_YESNOCANCEL  MB_ICONEXCLAMATION 
MessageBox(NULL, TEXT("..."), TEXT("..."),
           MB_YESNOCANCEL | MB_ICONEXCLAMATION);

MessageBoxIndirect 関数



1便

MessageBoxIndirect 使
MessageBoxIndirect 

作例
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpszCmdLine, int nCmdShow)
{
    MSGBOXPARAMS mbp;

    // 構造体をゼロクリア
    ZeroMemory(&mbp, sizeof mbp);

    // 構造体に属性を設定
    mbp.cbSize = sizeof mbp;
    mbp.hInstance = hInstance;
    mbp.lpszCaption = TEXT("Test");
    mbp.lpszText = TEXT("Hello, world!");
    mbp.dwStyle = MB_OK | MB_ICONASTERISK;

    // メッセージボックスを表示
    MessageBoxIndirect(&mbp);

    return 0;
}

MessageBoxIndirect のプロトタイプは,次の通りです。

MessageBoxIndirect 関数 [MSDN]

メッセージボックスを表示します。

int MessageBoxIndirect(
    LPMSGBOXARAMS lpmbp  // MSGBOXPARAMS 構造体
);
返り値
どのボタンが選択されたかを表す値が返ります (MessageBox 関数に同じ)。

メッセージボックスの属性を格納する MSGBOXPARAMS 構造体は,次のように定義されています。

MSGBOXPARAMS 構造体 [MSDN]

メッセージボックスの属性を表します。

typedef struct tagMSGBOXPARAMS
{
    UINT        cbSize;         // 構造体のサイズ
    HWND        hwndOwner;      // オーナーウィンドウ
    HINSTANCE   hInstance;      // インスタンス
    LPCTSTR     lpszText;       // テキスト
    LPCTSTR     lpszCaption;    // キャプション
    DWORD       dwStyle;        // メッセージボックスの種類
    LPCSTR      lpszIcon;       // アイコン
    DWORD_PTR   dwContextHelpId;  // ヘルプコンテキスト識別子
    MSGBOXCALLBACK lpfnMsgBoxCallback;  // コールバック関数
    DWORD       dwLanguageId;   // 言語識別子
} MSGBOXPARAMS;
dwStyle
MessageBox 関数の uType 引数と同様の値を指定します。





 cbSize 


Windows API  ZeroMemory 

ZeroMemory マクロ [MSDN]

メモリ領域をゼロクリアします。

void ZeroMemory(
    void *Destination,  // 始点アドレス
    size_t Length       // 長さ
);

スポンサーリンク