右クリックメニューを設定する



VC++ でマウスの右クリックで専用のメニュー(上の画像の中央右寄り)を表示して、国旗を切り替えます。

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

プロジェクトの設定

  1. メニュー選択で国旗を切り替える プロジェクトを開いて下さい。
    マウスの右クリックで専用のメニューを表示して、国旗を切り替えます。
  2. マウスが右クリックされると WndProc() に WM_RBUTTONDOWN: がポストされます。
    POINT は右クリックされた座標で、HMENU はメニューのハンドルです。
        POINT           pt;
        HMENU           hMenu,hSubmenu;
        
  3. WM_RBUTTONDOWN: に右クリックメニューのソースコードを記述します。
    pt にマウスが右クリックされた座標を格納します。
    LoadMenu() でメニューのハンドルを取得します。
    GetSubMenu() でサブメニューを取得します。1は左から二番目(国旗の種類(S))を指しています。
    TrackPopupMenu() でメニューを表示します。
    右クリックメニューから選択された場合も、普通のメニューと同じように実行されます。
    処理が終わると hMenu を開放して下さい。
    メニューのID(IDC_MAIN) はプロジェクトの名前と同じ名前が使われています
    プロジェクトの名前に合わせて修正して下さい。
        case WM_RBUTTONDOWN:
             pt.x= LOWORD(lParam);
             pt.y= HIWORD(lParam);
             hMenu= LoadMenu(hInst,(LPCTSTR)IDC_MAIN);
             hSubmenu= GetSubMenu(hMenu,1);
             ClientToScreen(hWnd,&pt);
             TrackPopupMenu(hSubmenu,TPM_LEFTALIGN,pt.x,pt.y,0,hWnd,NULL);
             DestroyMenu(hMenu);
             break;
        
  4. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    最初は日本の国旗が表示されます。
    ウインドウの上で右クリックすると国旗を選択する専用のメニューが表示されます。
    ここから選択した時も、普通のメニューと同じように動作することを確認して下さい。
  5. DialogBox のプログラムにはメニューバーがありません。
    DialogBox でメニューが必要なときは「右クリックメニュー」を使います。

【NOTE】

ウインドウに貼り付けたコントロール(EditBox や TreeView など)上で右クリックすると、親ウインドウに WM_CONTEXTMENU: として伝えられます。
親ウインドウでは WM_CONTEXTMENU: を受けて、右クリックメニューを処理して下さい。

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