VC++6.0 XPで開発しています
メニューエディターでメニュー(IDR_MODESELECT)を作成し、右クリックで表示させた
いのですが、作成したメニューがすべて表示されず、細長いメニューの一部だけがひょ
うじされてしまいます。(ちなみにサブメニューはありません)
どうしたら、よろしいのでしょうか?メニューの表示にサイズ指定は、なさそうなんで
すが?
void CEd2GPolyView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフ
ォルトの処理を呼び出してください
CMenu wPopUp;
VERIFY(wPopUp.LoadMenu(IDR_MODESELECT));
ClientToScreen(&point);
wPopUp.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, AfxGetMainWnd());
CScrollView::OnRButtonDown(nFlags, point);
}
LoadMenu()しただけでは駄目です。
GetSubMenu()しましょう。
それで表示されるはずです。
それから、ポップアップメニューは、
WM_RBUTTONDOWN メッセージ
で表示するより、
WM_CONTEXTMENU メッセージ
で表示した方が都合の良い場合が多いです。
違いは文章で説明するよりやってみた方が
早いので省略します。
bun さん、早々レスありがとうございます。
GetSubMenu(0)をすると、サブメニューをつくっていないためか、NULLが返されて、
落ちてしまいます。
かならず、作る必要があるのでしょうか?
仕様の上であらないのですが。
void CEd2GPolyView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフ
ォルトの処理を呼び出してください
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MODESELECT));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
ClientToScreen(&point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, AfxGetMainWnd());
CScrollView::OnRButtonDown(nFlags, point);
}
一般的にはポップアップメニューといえば
○○○
***
×××
といった並びのものが出ますが、(この場合は、サブでつくる必要がある)
熱血さんの求めてるものはそうではなく
ウィンドウの上のほうについてることの多い
「ファイル」「編集」といったメニューのような右方向に細長い
外見・形状のものをポップアップさせたい
ということでしょうか?
ryoさん、レスありがとうございます。
ryoさんのレスを参考にヘルプを読み、トライ&エラーでいろいろ、ためしたところ。
「一次元目のメニューバーのところにメニューを書くことはできない」という結論にな
りました。サブメニューのところに描き、何番目(0~)のサブメニューかをGetSubMenu
()の引数で指定すると上手いきました。
ご意見、ありがとうございました。
(PS’)メニューバーをクリックしてポップアップ表示をクリックすると、縦長に表
示するので、それを表示したいと思っていました。