ポップアップメニュー表示時にON_COMMAND_UIを呼び出したい – プログラミング – Home

ポップアップメニュー表示時にON_CO...
 
通知
すべてクリア

[解決済] ポップアップメニュー表示時にON_COMMAND_UIを呼び出したい


ユリ
 ユリ
(@ユリ)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

リストビューで選択アイテムがあったら
[編集]-[切り取り]をEnable
選択アイテムがなかったらDisableにしたいと思っています。

メニューバーの処理は以下のコードで実現できました。
void CHogeListView::OnUpdateEditCut(CCmdUI* pCmdUI)
{
// TODO: この位置に command update UI ハンドラ用のコードを追加してください
if (GetListCtrl().GetSelectedCount() > 0)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}

ポップアップメニューについても同様の処理を行いたいのですが
OnUpdateEditCutが呼び出されないため
つねに[編集]-[切り取り]がEnableになってしまいます。
どのようにコーディングしたらよいでしょうか?

ポップアップメニュー表示は以下のコードで行っています。
void CHogeListView::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加してください
CMenu menu;
menu.LoadMenu(IDR_HOGE_POPUP);
CMenu* pMenu=menu.GetSubMenu(0);

pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
pWnd);
menu.DestroyMenu();
}

開発環境はWinMe, VC++6.0SP5 MFCです。


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

TrackPopupMenu の第4引数に、メインウィンドウのポインタを指定してみてください。

pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
AfxGetMainWnd());

こうすることで、更新コマンドハンドラが呼ばれるようになると思います。


返信引用
ユリ
 ユリ
(@ユリ)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

TADさんの示された方法でうまく動作しました。
ただ、MSDNにはTrackPopupMenuの第4引数には
ポップアップ メニューを所有するウィンドウを
指定すると記載されています。

AfxGetMainWnd()だとCMainFrame*を渡すことになりますが
問題はないのでしょうか?


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

所有するウィンドウとは、メニューが更新や選択のメッセージを送る宛先のことです。
ありがたいことに、CMainFrameには、メニューから送られてくるメッセージ
を処理して、更新ハンドラや選択ハンドラを呼び出す処理があらかじめ含まれ
ているので、問題ありません。


返信引用
ユリ
 ユリ
(@ユリ)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

>所有するウィンドウとは、メニューが更新や選択のメッセージを送る宛先のことです。
そういうことだったんですか。
「所有するウィンドウ」について私の認識が誤ってました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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