特定の項目だけのポップアップメューを作るには


コンボ  2007-07-13 13:40:08  No: 65654

.NET2005  VISTA  です。

メニューの一部の項目だけを表示するポップアップメニューを作ろうと思いました。
ネット検索すると、どのサイトでも下記のようなコードが掲載されています。

void CMyDialog::OnRButtonDown(UINT nFlags, CPoint point) 
{
  CMenu menu;
  VERIFY(menu.LoadMenu(IDR_MENU1));
  CMenu* pPopup = menu.GetSubMenu(0);
  ASSERT(pPopup != NULL);
  ClientToScreen(&point);
  pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
     point.x, point.y, AfxGetMainWnd());
  CDialog::OnRButtonDown(nFlags, point);
}

それで、そのとおりにやってみたところ、ビルドは通るのですが、実行すると、
「Debug Assertion Failed!」
というエラーになります。

ブレークポイントを置くと、
VERIFY(menu.LoadMenu(IDR_MENU1));
の行で、スタックしています。

IDR_MENU1 は、メニューの小項目のIDだと思うのですが、たとえばデフォルトの「ファイル(F)」の中にある「開く」のID「ID_FILE_OPEN」を入れてもダメですし、自分でメニューの項目を作って、「IDR_MENU1」というIDをつけてもダメです。

なにがいけないのでしょうか。
アドバイスをお願いいたします。


RAPT  URL  2007-07-19 09:38:29  No: 65655

>IDR_MENU1 は、メニューの小項目のIDだと思うのですが
ちゃいます。メニューリソースのIDです。
リソースで新規メニューを作成すると、自動的に IDR_MENUxx というIDが
割り振られますが、アレです。
で、トップレベルはポップアップとして、サブメニューに項目を追加します。

--------------------
 p    
--------------------
    新規(N)
    終了(X)
--------------------
とかなるように。


コンボ  2007-07-19 12:31:21  No: 65656

RAPTさん、ありがとうございました。
解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加