ポップアップメニューを選択不可にするには

[戻る]
まかろに 2004/10/31(日) 12:12:22
いつもお世話になっております、まかろにです。

ツリービューアイテムの右クリックで出るポップアップメニューの項目を
選択不可状態にしようとしていますが、うまくいきません。
ソースの方は

void COOOView::OnRButtonDown(UINT nFlags, CPoint point) 
{
  // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたは
       デフォルトの処理を呼び出してください
    
  CMainFrame    *pFrame = (CMainFrame*)AfxGetApp() -> m_pMainWnd;
  CTreeCtrl    *pTree;
  CMenu        menu;
  CMenu        *pPopup;
    
  pTree = &GetTreeCtrl();                        
    {
      // ここで押されたアイテム番号に応じた処理を入れる予定
    }
    
  // ポップアップメニュー読み込み
  menu.LoadMenu(IDR_POPUP);
  pPopup = menu.GetSubMenu(0);
  ClientToScreen(&point);
  
  pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
             point.x, point.y, pFrame);

  pPopup->EnableMenuItem(ID_MENUITEM_INIT,
              MF_BYCOMMAND | MF_DISABLED | MF_GRAYED );
    
  CTreeView::OnRButtonDown(nFlags, point);
}

void COOOView::OnMenuitemInit() 
{
  // TODO: この位置にコマンド ハンドラ用のコードを追加してください
}

となっています。
メニューに ”初期化” 項目を入れて、それを選択不可状態にしようとしています。
何か間違っているとか足りない部分があれば、ご指摘いただければと思います。
よろしくお願い致します。

<開発環境>
・Windows XP
・VC++ 6.0   MFC

UPcn 2004/10/31(日) 14:04:23
TrackPopupMenu() はメニューを表示して選択されるまで制御を返しません。
ID_MENUITEM_INIT メニューの更新ハンドラを作って(ON_UPDATE_COMMAND_UI)、
そちらで Enable 制御してください。

なお、右クリックで表示されるメニュー(コンテキストメニュー)は、
WM_RBUTTONDOWN ではなく、WM_CONTEXTMENU で処理するのが定石です。
WM_CONTEXTMENU なら右クリックからだけでなく、
キーボードのアプリケーションキー(メニュー印のキー)からも
利用できるようになります。

まかろに 2004/11/01(月) 15:22:41
[[解決]]
アドバイスありがとうございます。
おかげさまでうまくいきました。
まだまだ勉強不足ですね、すいません。がんばります。
今後もよろしくお願いします。

古いスレッドには追加発言できません。