• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:タスクトレイから出したメニューの実行について)

タスクトレイから出したメニューの実行について

このQ&Aのポイント
  • タスクトレイから出したメニューの実行について分かりにくい点があります。
  • メニューの実装をダイアログクラスに書くと問題ないですが、CMainFrameクラスに書くと実行されません。
  • なぜCMainFrameクラスでの実装では実行されないのか、理由が分かりません。

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

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

>メニューの実装をCMainFrameクラスに書いても意味がないのに、 別に意味がないわけではありません。 >>この行の最後のthisはなに(どこ)でしょうか? >thisはダイアログクラスのオブジェクトのことだと思います。 と、いうふうに、VitaminBBさんが、ダイアログクラスのオブジェクト(CWnd*の派生クラス)に対してメッセージを送るようなコードを書いているだけです。 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxMainWnd()); こうすればメインウィンドウにメッセージが飛んで来るようになるのはわかりますよね。 >どうしてクラスウィザードのクラス名でCMainFrameを選ぶとオブジェクトIDにID_Myxxxが選択できるようになっているのですか? メニューエディタで作成されているメニューの項目だから。 というのが回答です。 メニューはひとつのウィンドウに紐づいているものではないので、全てのウィンドウに対するウィザードで表示されないとだめですよね。 ><質問2> >ただし、モードレスダイアログをメインウィンドウの子供にしてやると、 >CMainFrame内にメッセージが飛ぶようになります。 >これはどうしてなのですか? こっちはわかりませんねぇ。

VitaminBB
質問者

お礼

いつも回答ありがとうございます。 <質問1> 良く分かりました。 タスクトレイのことに囚われて、分かってしまえば愚かな質問だった気がします。 しかしながら、改めて別の状況についてお聞きしたいのですが、 メインウィンドウとボタンを1個配置したダイアログの場合において、 クラスウィザードを使うと、CMainFrameクラスとダイアログクラスのどちらを選んでも オブジェクトIDの欄からIDC_BUTTON1が選択できます。 でも、CMainFrameクラスのIDC_BUTTON1を選ぶと当然のことながら、ダイアログのボタンを押してもCMainFrameクラスのvoid CMainFrame::OnButton1() が実行されることは有りません。 なのにどうして選択できるようになっているのでしょうか?

VitaminBB
質問者

補足

お礼の記述後に書いています。 ウィザードの件は、よくよく考えるとウィザードが作り出すコードがどうなるかを考えてうまく使えば良いだけのことでありこだわるべき疑問ではないことがようやく分かって来ました。 と言うことで、これで一旦終わりにしたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

> pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); ヒントです。 この行の最後のthisはなに(どこ)でしょうか? http://www.microsoft.com/japan/developer/library/vcmfc/_mfc_cmenu.3a3a.trackpopupmenu.htm

VitaminBB
質問者

お礼

回答ありがとうございます。 thisはダイアログクラスのオブジェクトのことだと思います。 済みませんが、ちょっと質問を変えさせてください。 <質問1> メニューの実装をCMainFrameクラスに書いても意味がないのに、どうしてクラスウィザードのクラス名でCMainFrameを選ぶとオブジェクトIDにID_Myxxxが選択できるようになっているのですか? そういう仕様だと言われればそれまでですが。 <質問2> ただし、モードレスダイアログをメインウィンドウの子供にしてやると、CMainFrame内にメッセージが飛ぶようになります。 これはどうしてなのですか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【VBA】 VBAを使ってExcelにSendMessageしてメニューを実行したい

    エクセルにおいて、VBAを使ってExcelに対してSendMessageをおこないメニューを実行したいのですが、メニューのSendMessageの引数WPARAMとLPARAMに 何を渡せば良いのでしょうか?SPY++を使ってメニューを実行したときにExcelに送られるWM_COMMANDを監視していましたがWM_COMMANDが見つかりませんでした。 ご存知の方、ご教授お願いします。 ちなみに、オートシェイプ選択時に「書式」-「オートシェイプ」メニューを実行し、書式設定ダイアログが表示され、オートシェイプの書式設定を変更するのが目的です。(VBAを使って書式設定のダイアログを表示する必要あり) SendKeysステートメントを使ってやってみましたがダメでした。この場合、モードレスダイアログに書式設定するコマンドボタンを配置し、そのボタンをクリックしたときにSendKeysを実行するもので、モードレスダイアログを表示している間はキーがモードレスダイアログに送られると判断してSendKeysの使用はやめました。

  • エディットコントロールの色の変更方法

    環境はVC++2008 MFCです。 現在ダイアログにスタティックテキストの色を変更しようと 下記HPを参考にしていますが、 「OnCtlColor関数のオーバーライド ClassWizardを使って、OnCtlColor関数をオーバーライドさせる。 」 の方法がわかりません。 http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_EDITcolor.html クラスビュー> ダイアログクラス選択> プロパティ> メッセージ を表示してみても何も表示されていませんし。 どのようにどのようにオーバーライドするのでしょうか? また、オーバーライドの方法をクラスウィザードを使用せず 後学の為、そのままコーディングレベルでご教授頂いたとしても とてもありがたいと思います。 宜しくお願いします。

  • メニューをグレー表示でなく非表示にするには?

    環境はVisual C++ .netでリソースで作ったメニューをCMainFrameクラスで表示しないようにしようとしたのですが、なぜか選択できないグレー表示になってしまいます。気持ち悪いので、どなたかご存知の方教えていただけると嬉しいのですが。 CMainFrame::CMainFrame() { CMenu *pMainMenu; CMenu *pSubMenu; pMainMenu = GetMenu(); pSubMenu->RemoveMenu(ID_SELECT_DATA_FOLDER, MF_BYCOMMAND); DrawMenuBar(); } void CMainFrame::OnUpdateSelectDataFolder(CCmdUI *pCmdUI) { // TODO : ここにコマンド更新 UI ハンドラ コードを追加します。 pCmdUI->Enable(false); }

  • メニューを追加した時の実装を書くクラスは?

    環境 WIN98 VC++6.0 MFC にて メニューにコマンドを追加しクラスウィザードにて、コマンドの実装をするときに、CxxxMainFrmクラスとCxxxViewクラスのどちらにも実装出来ます。 どうしてどちらにも実装できるのですか? また、それぞれの使い分けはどうなっているのですか?

  • 【MFC】キャンセルボタン処理が実装できない

    VC++2005(MFC)にて下記サイトを参考にMDIアプリケーションを作成しています。 http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_MDI1.html 手順として、プロジェクトを新規作成し、MFC AppWizard(exe)で 新規プロジェクト名をMDITest1に設定し、アプリケーションの種類はMDI、 ビュークラスCMDITest1Viewの基本クラスはCFormViewとします。 リソースビューより、自動生成されたフォームの上に、 Buttonを配置し、イベントハンドラOnBnClickedButton1()内にて、 IDCANCEL()処理にて、ボタン押下時のウィンドウを閉じる処理を 実装したいのですが、コンパイルエラーが発生します。 基本クラスがCDialogクラスの場合は実装できるような気がするのですが。。 フォームビューだと、キャンセル処理は実装不可能なのでしょうか? また、不可能だとしたらウィンドウを閉じる処理はどのように実装すればよいのでしょうか? 解決策をご存知の方おられましたら、お手数ですがご教授宜しくお願い致します。

  • Accessフォームがメインメニューで隠れてしまう

    Accessで作成した社員情報データベースを一般の人は参照のみとし、 数人の有資格者だけデータ編集できるよう、メインメニューの中のボタンで IDとパスワード入力フォームを開き、合致した場合、編集対象フォーム、又 は別フォームメニューが開くようにしたのですが、一つ問題が。 IDとパス入力で対象フォームが無事開くのですが、画面のその対象フォーム の上というか前面にメインメニューが表示され、対象フォームがメインメニュー の背面に表示されてしまうのです。 原因と対処方が分からず、困り果てました。どうか解決策がありましたら ご教授頂けますと幸いです。 使用accessは2002です。よろしくお願い致します。

  • Windows7 なぜ管理者権限実行の有無で動作が

    MFCで作成されたWindowsフォームアプリケーションをWindows7で実行する際、 管理者権限で実行しないと一部のダイアログやメニューが表示さず 管理者権限で実行すると表示される といった状況に遭遇しています。 ソースコードがないのでデバッグできていないのですが 仕組みをよくご存じの方なら、 ダイアログやメニューで表示されないものがあるのは このあたりがあやしいのではと、 わかるのではないかと思い、 質問させて頂きました。 よろしくお願いします。

  • 新しいフォームへのデータを渡したい

    Visual studio 2005にてフォームアプリケーションを作成しています。 メインとなるフォーム(form.vb)と、ダイアログ表示用のフォーム(dialog.vb)を使い、メインでの値をダイアログ用のフォームの方で表示させたいのです。 メインのTextBox1にテキストを入力させ、「実行」ボタンを押すとダイアログ表示用フォームが立ち上がり、ダイアログのTextBox1に同じものを表示させたい・・・という寸法です。 できるだけ簡素なコードでこれを行うにはどうすればいいでしょうか? よろしくお願いします。

  • タスクトレイアイコンからのメニュー表示について

    今VBでプログラムを作成しています。 サンプルソースを調べたりして、「Shell_NotifyIcon」を使用してタスクトレイにアイコンを追加する事はできたのですが、そのアイコンを右クリック等してメニューを表示させることができません。コールバックメッセージにWM_MOUSEMOVEを指定しているのですがフォームのMouse_Moveイベント自体が発生していないようです。 いくつかサンプルソースをダウンロードして実行してみましたが問題は無かったので、環境のせいでは無いと思います。 原因の可能性として考えつくものがあったら教えて下さい。 (ソースコードは長くなるので割愛させて頂きます。APIを使用している部分は全てサンプルソースのコピーそのままです。)

  • アクセス2002でメニューを消したい

    フォームを使用して、メインメニューを作ったのですが、そのフォームを開いた時に、一番上のメニューバーの消し方を教えてください。 ファイル(F)編集(E)表示(V)とか・・・