累・澑・瀲騰ーvク為舗・について2 – プログラミング – Home

累・澑・瀲騰ーvク為舗・について2
 
通知
すべてクリア

[解決済] 累・澑・瀲騰ーvク為舗・について2


みな
 みな
(@みな)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

VC++6.0 MFC WinXP

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


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

TrackPopupMenu()の引数にON_UPDATE_COMMAND_UIが呼ばれて欲しい
ウィンドウを指定します。


返信引用
みな
 みな
(@みな)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

すみません。
少し間違った事を書いてしまいました。

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

// メインポップアップメニュー
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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> this //このメニューを所有するウィンドウ

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


返信引用
みな
 みな
(@みな)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> // 追加箇所
> m_Menu.LoadMenu(IDR_MAINFRAME);

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

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


返信引用
みな
 みな
(@みな)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

どんなエラーが出ますか?


返信引用
みな
 みな
(@みな)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

こんな感じのダイアログが表示されます

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

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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

正確には、どんなエラーが出ますか?
行番号も書いてあると思うのですが...

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

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


返信引用
みな
 みな
(@みな)
ゲスト
結合: 22年前
投稿: 10
Topic starter  

直接メニューリソースを作成してそこからポップアップする方法を行いましたら
上手くいきました。
dairygoods ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました