VC++6.0 MFC WinXP
メニューバーではON_UPDATE_COMMAND_UIが呼ばれるのに、どうして
ポップアップメニューの場合はON_UPDATE_COMMAND_UIが呼ばれないのでしょうか?
もし、呼びたい場合はどのようにしたらよいのでしょうか?
申し訳ないですけど、おしえてください。
TrackPopupMenu()の引数にON_UPDATE_COMMAND_UIが呼ばれて欲しい
ウィンドウを指定します。
すみません。
少し間違った事を書いてしまいました。
ポップアップメニューで作成した項目にマウスを置くと
ステータスバーにその情報を表示させたいのですが、
コールバックみたいな関数が見つかりません。
// メインポップアップメニュー
m_Menu.CreatePopupMenu();
m_Menu.AppendMenu(MF_STRING|MF_ENABLED,ID_FILE_OPEN ,開く(&O));
m_Menu.AppendMenu(MF_STRING|MF_ENABLED,ID_FILE_PRINT ,印刷(&P));
m_Menu.AppendMenu(MF_SEPARATOR);
// ポップアップの位置を設定
CPoint posMouse;
::GetCursorPos(&posMouse);
m_Menu.TrackPopupMenu(
TPM_LEFTALIGN | //クリック時のX座標をメニューの左辺にする
TPM_RIGHTBUTTON, //右クリックでメニュー選択可能とする
posMouse.x, posMouse.y, //メニューの表示位置
this //このメニューを所有するウィンドウ
);
m_Menu.DestroyMenu();
> this //このメニューを所有するウィンドウ
このthisは、どのクラスのオブジェクトを指していますか?
ここにメインフレームを指定します。
dairygoodsさんありがとうございます。
thisをAfxGetApp()->m_pMainWndに変更いたしました。
そして、m_Menu.LoadMenu(IDR_MAINFRAME);を追加いたしました。
そうすると、コンパイルは通るのですが右クリックするとエラー画面が表示されます。
何がおかしいのでしょうか。
// 追加箇所
m_Menu.LoadMenu(IDR_MAINFRAME);
// メインポップアップメニュー
m_Menu.CreatePopupMenu();
m_Menu.AppendMenu(MF_STRING|MF_ENABLED,ID_FILE_OPEN ,開く(&O));
m_Menu.AppendMenu(MF_STRING|MF_ENABLED,ID_FILE_PRINT ,印刷(&P));
m_Menu.AppendMenu(MF_SEPARATOR);
// ポップアップの位置を設定
CPoint posMouse;
::GetCursorPos(&posMouse);
m_Menu.TrackPopupMenu(
TPM_LEFTALIGN |
TPM_RIGHTBUTTON,
posMouse.x, posMouse.y,
AfxGetApp()->m_pMainWnd <<----変更箇所
);
m_Menu.DestroyMenu();
> // 追加箇所
> m_Menu.LoadMenu(IDR_MAINFRAME);
これの追加はどんな意図でしょうか?
また、エラーは何行目でどんなエラーがでますか?
見たところ、1つのメニューに対して
LoadMenuとCreatePopupMenuと多重に
作成を行っているのが問題のような気がしますが。
m_Menu.LoadMenu(IDR_MAINFRAME);を外して行った結果、
同じエラーになりました。
デバックではTrackPopupMenuの箇所でエラーになっている事がわかりました。
何が原因なのでしょうか。
すみません。
どんなエラーが出ますか?
こんな感じのダイアログが表示されます
//---------------------------------------------------
Debug Assertion failed!
File afxwin1.inl
For Infomation on how your program can cause an assertion failure,
see the Visual C++ documentation on asserts.
正確には、どんなエラーが出ますか?
行番号も書いてあると思うのですが...
また、「再試行」ボタンを押すと、
該当行が表示されると思いますが、
どんなコードが書いてありますか?
その行のチェック条件が満たされないことについて、
なにか思い当たる原因はありますか?
直接メニューリソースを作成してそこからポップアップする方法を行いましたら
上手くいきました。
dairygoods ありがとうございました。