• ベストアンサー

ポップアップメニューにチェックを付けるには?

<環境> WIN98 VC++6.0 MFC  以下でメニューにチェックをつけることが出来たのですが、右クリックして出したポップアップメニューの場合はチェックが付きません。 どうすれば付くようになりますか? お願いいたします。 void CMainFrame::OnUpdateMenuitem32771(CCmdUI* pCmdUI) { pCmdUI->SetCheck(TRUE); }

  • mk1234
  • お礼率94% (1832/1940)

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>このように更に一つ下のポップアップメニューにチェックをつけたいのですが、 そのまま文章で書いているとおりのことをすればいいだけでは? 1.さらに一つ下のポップアップメニューのCMenu*を取得する 2.チェックをつける これだけの気がしますけど。

mk1234
質問者

お礼

これでうまくいきましたが、何かおかしなところはないでしょうか? SetForegroundWindow(); // この処理を忘れずに! CMenu menu; CMenu menu1; CMenu* pPopup; CMenu* pPopup1; VERIFY(menu.LoadMenu(IDR_MENU1)); //サブメニュー用 pPopup = menu.GetSubMenu(0); pPopup1=pPopup->GetSubMenu(1);//サブメニュー用 ASSERT(pPopup != NULL); pPopup1->CheckMenuItem(1,((m_bFoo?MF_CHECKED:MF_UNCHECKED) | MF_BYPOSITION));////サブメニューにチェックを付ける pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); PostMessage(WM_NULL); // この処理も忘れずに!

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

右クリックメニューを表示しようとしたときに、そのイベントハンドラが呼ばれているか確認しましたか? http://www.interq.or.jp/jazz/iijima/mfc/iijima/15popupmenu.html

参考URL:
http://www.interq.or.jp/jazz/iijima/mfc/iijima/15popupmenu.html
mk1234
質問者

お礼

回答ありがとうございます。 以下で何とかチェックを付けることは出来ましたが実際にやりたいことは、このように更に一つ下のポップアップメニューにチェックをつけたいのですが、よろしくお願いします。 あああ  いいい ▲  レ おおお ううう えええ case WM_RBUTTONDOWN:{ SetForegroundWindow(); // この処理を忘れずに! CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU1)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); pPopup->CheckMenuItem(8,(MF_CHECKED | MF_BYPOSITION));//チェックを付ける pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); PostMessage(WM_NULL); // この処理も忘れずに! break;

関連するQ&A

  • MFC ポップアップメニューのチェック表示について

    はじめまして。 質問させてください。 VC 2005 MFC を使用して開発しております。 ダイアログベースです。 ポップアップメニューのアイテムをクリックされたら チェックマークをON OFFしたいのですが、現状うまくいきません。 [現在の方法] //右クリックで表示 void CAnalogClockDlg::OnRButtonDown(UINT nFlags, CPoint point) { CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); ClientToScreen(&point); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd()); CDialog::OnRButtonDown(nFlags, point); } //項目の有効無効時 void CAnalogClockDlg::OnUpdatePopupFore(CCmdUI *pCmdUI) { pCmdUI->SetCheck(false); pCmdUI->SetText(_T("test")); } リソースメニューで [checked] = trueにして 初回表示はチェックありになっているのですが、 pCmdUI->SetCheck(false); の処理で変更されません。 ちなみにキャプションを変更できません。 何か根本的に間違っているのでしょうか? 詳しい方がおりましたら ご教授お願いいたします。

  • ポップアップメニュー

    ポップアップメニューについて質問させて頂きます。 リストビュー上で右クリックしたときにポップアップメニューを表示させているのですが、このポップアップメニューの項目がクリックされた時のイベントの取り方が分かりません。 ご存知の方、宜しくお願いします。 環境はVisual Studio6.0 Windows2000です

  • ポップアップメニューがおかしいです。

    ポップアップメニューや右クリックメニューが透明に表示されています。見にくくてしょうがありません。だれか助けてください。。。。

  • autohotkeyのポップアップメニューについて

    autohotkeyを以下環境で使用しています。 OS: Windows7 64bit autohotkey: Ver 1.0.48.05 やりたい事: 通知領域にあるautohotkeyアイコンを右クリックして、 ポップアップメニューから"Reload This Script"を選びたい (添付画像を参照してください) 以下のようにスクリプトを組みました Ctrl+Alt+vにて起動 autohotkeyアイコンは、座標(1000, 800)にあるとします。 ^!v:: MouseClick, RIGHT, 1000, 800, , 5 Sleep, 1000 Send, r return 実行すると右クリックのポップアップメニューまでは表示されるのですが、 "Send, r"が実行されず、"Reload This Script"が選べません。 ※この状態で、手動で"r"キーを押すと、きちんと"Reload This Script"が実行されます 通知領域アイコンを右クリックして出てくるポップアップメニューにコマンドを通すのは、 "Send, r"ではなくて特別なコマンドが必要なのでしょうか? 以上、よろしくお願いいたします。

  • タスクトレイのポップアップメニュー

    こんにちわ。 タスクトレイにアイコンを登録し、右クリックでポップアップメニューを表示しています。 そのポップアップを表示している状態でデスクトップを左クリックしてもメニューが消えないのはなぜでしょうか?ポップアップされたメニューをクリックしないとメニューが消えてくれません。 何かのイベントでメニューを消す処理をいれておくのでしょうか? どなたか宜しくお願いします。 (VB6 SP5で作成しました。)

  • WM_TIMERからポップアップメニューを閉じるには?

    質問させて頂きます。 現在C++にてWin32SDKを使用し開発を行っております そこで、メインウィンドウが非表示の時にもポップアップメニューを表示するようにしているのですが 非表示の際、ホットキーからポップアップメニューを表示すると ポップアップメニュー以外をクリックしても消えますが WM_TIMER等、一定時間経過時に表示した場合 ポップアップメニュー以外をクリックしても消えません WM_HOTKEYでは SetForegroundWindow関数でアクティブにした後に TrackPopupMenu関数でポップアップメニューを表示して 関係ない所をクリックされてもうまく消えます WM_TIMERでもWM_HOTKEYと同じ処理をしても上手くいきません タスクトレイの右クリックと同じく TrackPopupMenu関数の後にWM_NULLをポストしてもメニューは消えません 何か上手く解決出来る方法は無いでしょうか? どうぞよろしくお願いします。

  • ダイアログの表示、非表示の切り替えについて

    環境 WIN98 VC++6.0 MFC SDIにて 1.ポップアップメニューの”ダイアログ作成”をクリックすると、 void CMainFrame::OnKNew() { CInput dlg; int iID = dlg.DoModal(); } として、ダイアログを作成します。 2.次に、ダイアログのボタン押し下げにてダイアログを非表示にします。 void CInput::OnButton1() { ShowWindow(SW_HIDE); } このようなコードにおいて、非表示状態での”ダイアログ作成”クリックでは非表示から表示に切り替えることを実現するにはどのようにすれば良いのでしょうか? よろしくお願いいたします。

  • 押されたキーにてポップアップメニューを切り替える

    OS:XP SP2 アプリ:Excel 2002 ワークシート上で右クリックにてポップアップメニューが表示されますが、Ctrl+右クリック、Shirf+右クリック、Alt+右クリックにて、独自のポップアップメニューを表示させようてしています。 プロジェクトにクラスモジュールを追加し下記の様に宣言しています。 Private WithEvents App As Application Private Sub Class_Initialize() Set App = Application End Sub 右クリックイベント内で現在押されているキーを判断することはできないでしょうか? Private Sub App_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) ここで押されたキーにて表示するメニューを切り替える End Sub 独自のポップアップメニューの追加/表示はできています。 ご教授のほど宜しくお願いします。

  • ポップアップメニュー

    センター寄せのホームページで、プルダウン形式のポップアップメニューを表示したいのですが、なにか解説しているホームページはないでしょうか? 通常、ポップアップメニューを作成する場合には、左上からの絶対座標を指定する形で作成しており、センター寄せでは、できないと言い切っていました。しかし、最近センター寄せのホームページでポップアップメニューのあるものを見てしまったので、実際にはできるのだと思った次第であります。 http://www.cubesystem.co.jp/ 2階層以下のページがセンター寄せのポップアップメニューになってます。

  • ポップアップメニュー

    NotifyIconでタスクバーに呼び出したアイコンの上で右クリックをしたら、ポップアップメニューが表示させるように作りたいのですが、作り方が分かりません。(サイトなどを見たりしました。) 出きれば教えて頂きたいと思います。 *何をしたいのか↓ タスクトレイで表示されたアイコンを右クリックをするとポップアップメニューが出る。 ・環境 Microsoft Visual C++ SDK HINSTANCE hInst; POINT point; static HMENU hMenu,hSubMenu; /////////////////省略/////////////////// case WM_RBUTTONDOWN:  hMenu = LoadMenu(hInst,"MENUDATA");  hSubMenu = GetSubMenu(hMenu,0);  point.x = LOWORD(lParam);  point.y = LOWORD(lParam);  TrackPopupMenu(hSubMenu,TPM_LEFTALIGN,point.x,point.y,0,hWnd,NULL); break; これではうまくいかないのでご助言お願いします。