.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をつけてもダメです。
なにがいけないのでしょうか。
アドバイスをお願いいたします。
>IDR_MENU1 は、メニューの小項目のIDだと思うのですが
ちゃいます。メニューリソースのIDです。
リソースで新規メニューを作成すると、自動的に IDR_MENUxx というIDが
割り振られますが、アレです。
で、トップレベルはポップアップとして、サブメニューに項目を追加します。
--------------------
p
--------------------
新規(N)
終了(X)
--------------------
とかなるように。
RAPTさん、ありがとうございました。
解決しました。
ツイート | ![]() |