メニューを ON,OFF する



VC++ で選択できないメニュー項目を OFF(薄い灰色) で表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. メニュー選択で国旗を切り替える プロジェクトを開いて下さい。
    現在表示中の国旗のメニュー項目を OFF(薄い灰色) にして、選択出来ないように設定します。
  2. WndProc() にメニューを ON,OFF するコードを追加します。
    hMenu はメニューのハンドルで、WndProc() の先頭で GetMenu() 関数で取得します。
    最初は日本の国旗を表示するので、IDC_FLAG0 を選択出来ないように設定しています。
        static HMENU    hMenu;              // メニューのハンドル
    
        hMenu= GetMenu(hWnd);
        switch (message) 
        {
            case WM_CREATE:
                EnableMenuItem(hMenu, IDC_FLAG0, MF_GRAYED);
                break;
        
  3. メニューから国旗が選択されたときの処理です。
    MF_GRAYED がメニュー項目を OFF にして選択出来ないように設定するコードで、MF_ENABLED が 選択できるようにするコードです。
            case IDC_FLAG0:
                flag_no= 0;
                EnableMenuItem(hMenu, IDC_FLAG0, MF_GRAYED);
                EnableMenuItem(hMenu, IDC_FLAG1, MF_ENABLED);
                EnableMenuItem(hMenu, IDC_FLAG2, MF_ENABLED);
                InvalidateRect(hWnd, NULL, TRUE);
                break;
            case IDC_FLAG1:
                    :
                    :
            case IDC_FLAG2:
                    :
                    :
            case WM_PAINT:
                hdc = BeginPaint(hWnd, &ps);
                // TODO: 描画コードをここに追加してください...
                switch (flag_no)
                {   case 0: flag0(hdc);  break;
                    case 1: flag1(hdc);  break;
                    case 2: flag2(hdc);  break;
                }
                EndPaint(hWnd, &ps);
                break;
        
  4. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    日本の国旗が表示されて、日本を選択するメニューが選択できないようになっていたら完成です。
    他の国旗を選択して、同様に選択できないようになることを確認して下さい。

【演習】

  1. プログラムを完成させて下さい。
    ベースとなるプログラムは メニュー選択で国旗を切り替える を参照して下さい。

超初心者のプログラム入門(Win32API C++)