累k澑k瀲騰ーvク為舗Wについて2

[戻る]
みな 2005/06/13(月) 20:20:12
VC++6.0 MFC WinXP

メニューバーではON_UPDATE_COMMAND_UIが呼ばれるのに、どうして
ポップアップメニューの場合はON_UPDATE_COMMAND_UIが呼ばれないのでしょうか?
もし、呼びたい場合はどのようにしたらよいのでしょうか?
申し訳ないですけど、おしえてください。

dairygoods 2005/06/13(月) 20:38:47
TrackPopupMenu()の引数にON_UPDATE_COMMAND_UIが呼ばれて欲しい
ウィンドウを指定します。

みな 2005/06/13(月) 21:27:37
すみません。
少し間違った事を書いてしまいました。

ポップアップメニューで作成した項目にマウスを置くと
ステータスバーにその情報を表示させたいのですが、
コールバックみたいな関数が見つかりません。

// メインポップアップメニュー
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();

dairygoods 2005/06/14(火) 09:34:37
>    this                    //このメニューを所有するウィンドウ

このthisは、どのクラスのオブジェクトを指していますか?
ここにメインフレームを指定します。

みな 2005/06/14(火) 10:06:50
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();

dairygoods 2005/06/14(火) 10:14:08
> // 追加箇所
> m_Menu.LoadMenu(IDR_MAINFRAME);

これの追加はどんな意図でしょうか?
また、エラーは何行目でどんなエラーがでますか?

見たところ、1つのメニューに対して
LoadMenuとCreatePopupMenuと多重に
作成を行っているのが問題のような気がしますが。

みな 2005/06/14(火) 10:19:58
m_Menu.LoadMenu(IDR_MAINFRAME);を外して行った結果、
同じエラーになりました。
デバックではTrackPopupMenuの箇所でエラーになっている事がわかりました。
何が原因なのでしょうか。
すみません。

dairygoods 2005/06/14(火) 11:00:48
どんなエラーが出ますか?

みな 2005/06/14(火) 11:15:16
こんな感じのダイアログが表示されます

//---------------------------------------------------

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 2005/06/14(火) 12:35:59
正確には、どんなエラーが出ますか?
行番号も書いてあると思うのですが...

また、「再試行」ボタンを押すと、
該当行が表示されると思いますが、
どんなコードが書いてありますか?

その行のチェック条件が満たされないことについて、
なにか思い当たる原因はありますか?

みな 2005/06/15(水) 09:40:13
[[解決]]
直接メニューリソースを作成してそこからポップアップする方法を行いましたら
上手くいきました。
dairygoods ありがとうございました。

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