メインウィンドウ

ダイアログボックスにメニューを付けます。

メニュー(win124)

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" とします。


[前] [目次] [次]