ダイアログボックスにメニューを付けます。
win124.cpp
//
// Windows プログラム
//
#include <windows.h>
#include <tchar.h>
#include "resource.h"
#include <MyAboutBox.h>
// グローバル変数
HINSTANCE hInst; // 現在のインターフェイス
// ダイアログプロシージャ
INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
// アプリケーション開始位置
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow)
{
hInst = hInstance; // インスタンスハンドル保存
DialogBox(hInst, TEXT("MyDlgMain"), NULL, DlgProc);
}
// ダイアログプロシージャ
INT_PTR CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
int wmId;
switch (msg)
{
case WM_CLOSE:
EndDialog(hWnd, LOWORD(wp));
return (INT_PTR)TRUE;
break;
case WM_COMMAND:
wmId = LOWORD(wp);
switch(wmId)
{
case IDM_EXIT:
EndDialog(hWnd, wmId);
return (INT_PTR)TRUE;
break;
case IDM_ABOUT:
DialogBox(hInst, TEXT("MyAboutBox"), hWnd, About);
return (INT_PTR)TRUE;
break;
}
return (INT_PTR)TRUE;
break;
}
return (INT_PTR)FALSE;
}
resource.h
#define IDM_EXIT 40000 #define IDM_ABOUT 40001
win124.rc
#include <windows.h>
#include "resource.h"
//
// Menu resources
//
MyMenu MENU
BEGIN
POPUP "ファイル(&F)"
BEGIN
MENUITEM "終了(&X)", IDM_EXIT
END
POPUP "ヘルプ(&H)"
BEGIN
MENUITEM "バージョン情報(&A)", IDM_ABOUT
END
END
//
// Dialog resources
//
MyDlgMain DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CENTER | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_GROUP | WS_TABSTOP | WS_THICKFRAME | WS_SYSMENU
CAPTION "Windowsプログラム"
MENU MyMenu
FONT 9, "MS UI Gothic"
BEGIN
END
MyAboutBox DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "バージョン情報"
FONT 8, "Ms Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK", IDOK, 129, 7, 50, 14
LTEXT "win124, Version 1.0", IDC_STATIC, 39, 43, 114, 8, SS_LEFT | SS_NOPREFIX
LTEXT "Copyright (C) 2010", IDC_STATIC, 39, 55, 114, 8, SS_LEFT
END
MyAboutBox.h
#pragma once
//
// バージョン情報ダイアログプロシージャ
//
INT_PTR CALLBACK About(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
int wmId;
switch (msg)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
wmId = LOWORD(wp);
if(wmId == IDOK){
EndDialog(hDlg, wmId);
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
実行画面です。
メニューを付けるのは簡単です。 リソースファイルに次のように書きます。
MyMenu MENU
BEGIN
POPUP "ファイル(&F)"
BEGIN
MENUITEM "終了(&X)", IDM_EXIT
END
POPUP "ヘルプ(&H)"
BEGIN
MENUITEM "バージョン情報(&A)", IDM_ABOUT
END
END
そして、"MyDlgMain"に、"MENU MyMenu" と書くだけです。
メニューを動作させるには、"IDM_EXIT" のようなマクロ定数を使います。 これは、"resource.h" に書きます。
メニューが選択されると、WM_COMMANDメッセージがやって来ます。 そこで、DlgProcプロシージャで捕まえます。 そして、LOWORD(wp) に IDM_EXIT などが入っているので、それでわかりまず。
ついでに、バージョン情報用のダイアログボックスを作りました。 このプロシージャは変わることがないので、"include" フォルダへ保存します。 ファイル名は、"MyAboutBox.h" とします。