//
//     メニューの制御
//
//  2001/ 1/ 4 宍戸 輝光
//

#include <windows.h>

HINSTANCE hInst;

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HWND hwMain;
HMENU hMenu,hMenu1,hMenuSub;
HMENU hMenuSub1;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                    PSTR szCmdLine,int iCmdShow){

	MSG  msg;
	WNDCLASSEX wndclass;

	// ウインドウクラス設定
	wndclass.cbSize        = sizeof(wndclass);
	wndclass.style         = CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc   = WndProc;
	wndclass.cbClsExtra    = 0;
	wndclass.cbWndExtra    = 0;
	wndclass.hInstance     = hInstance;
	wndclass.hIcon         = LoadIcon(hInstance,"APP_ICON");
	wndclass.hCursor       = LoadCursor(NULL,IDC_ARROW);
	wndclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
	wndclass.lpszMenuName  = NULL;
	wndclass.lpszClassName = "CWindow";
	wndclass.hIconSm       = NULL;

	RegisterClassEx(&wndclass); // ウインドウクラス登録

	hwMain = CreateWindow("CWindow","メニューの制御",
	  WS_OVERLAPPEDWINDOW | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,
	  280,120,NULL,NULL,hInstance,NULL);

	// メニュー作成
	hMenu=CreateMenu();     // トップレベル
	hMenu1=CreateMenu(); // 「ファイル」メニュー
	hMenuSub=CreateMenu(); // 「画像情報」メニュー

    // 「メニュー1」メニュー項目作成
	AppendMenu(hMenu1,MF_STRING,1,"項目2有効(&S)");
	AppendMenu(hMenu1,MF_STRING,2,"項目2(&2)");
	AppendMenu(hMenu1,MF_SEPARATOR,0,NULL);
	AppendMenu(hMenu1,MF_STRING,3,"終了(&X)");

	// 「設定」メニュー項目作成
	hMenuSub1=CreateMenu(); // 「サブメニュー」メニュー
	AppendMenu(hMenuSub1,MF_STRING,11,"ラジオ1(&1)");
	AppendMenu(hMenuSub1,MF_STRING,12,"ラジオ2(&2)");
	AppendMenu(hMenuSub1,MF_STRING,13,"ラジオ3(&3)");
	hMenuSub=CreateMenu(); // 「サブメニュー」メニュー
	AppendMenu(hMenuSub,MF_POPUP,(UINT)hMenuSub1,"サブ項目(&S)");

	// トップレベルメニューに追加
	AppendMenu(hMenu,MF_POPUP,(UINT)hMenu1,"メニュー1(&1)");
	AppendMenu(hMenu,MF_POPUP,(UINT)hMenuSub,"サブメニュー(&S)");

	CheckMenuRadioItem(hMenuSub,11,13,12,MF_BYCOMMAND);

	// ウインドウにメニューを設定
	SetMenu(hwMain,hMenu);

	while (GetMessage(&msg,NULL,0,0)) { /* メッセージループ */

		TranslateMessage(&msg);
		DispatchMessage(&msg);

	}

	return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {

	switch (iMsg) {

		case WM_INITMENUPOPUP:

			if (lParam==0 && 
			  (GetMenuState(hMenu1,1,MF_BYCOMMAND)&MF_CHECKED)!=0)
				EnableMenuItem((HMENU)wParam,2,MF_ENABLED);
			else
				EnableMenuItem((HMENU)wParam,2,MF_GRAYED);

			return 0;

		case WM_COMMAND:

			switch (LOWORD(wParam)) {

			case 1:

				if ((GetMenuState(hMenu1,1,MF_BYCOMMAND)&MF_CHECKED)==0)
					CheckMenuItem(hMenu1,1,MF_CHECKED);
				else
					CheckMenuItem(hMenu1,1,MF_UNCHECKED);

				break;

			case 3:

				DestroyWindow(hwnd);

				break;

			case 11:
			case 12:
			case 13:

				CheckMenuRadioItem(hMenuSub,11,13,LOWORD(wParam),MF_BYCOMMAND);

				break;

			}

			return 0;

		case WM_DESTROY : // 終了処理

			PostQuitMessage(0);

			return 0;

	}

	return DefWindowProc (hwnd, iMsg, wParam, lParam) ;

}