• ベストアンサー

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

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

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

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

メニューのコマンドのクリックという動作は、プログラム上は、それと関連付けられたメッセージの発行に置き換えられます。 CxxxMainFrmクラスとCxxxViewクラスのどちらもにそのメッセージが渡されているんでしょう。 使いわけは好きなほう…とはいっても、その動作から実装すべきクラスが見えて来るはず。判らなければ、じっくりと考え下さい。適切な設計は、プログラマとしての大事な技能の一つです。

VitaminBB
質問者

お礼

回答ありがとうございます。 メニューの円をクリックするとクライアント領域に円が描画され、メニューの三角をクリックすると三角が描画されるような場合は、どちらに実装すれば良いでしょうか?

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

その他の回答 (2)

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.3

CViewのクライアント領域に描画するだけなら、CViewで処理をするのが一番です。 CView内で処理が完結しますからね。

VitaminBB
質問者

お礼

回答ありがとうございます。 #勝手に大きな勘違いをして質問してしまったようです。 書くべきところに書く。ですね。

全文を見る
すると、全ての回答が全文表示されます。
  • orion6619
  • ベストアンサー率41% (5/12)
回答No.2

基本的にDocument、View、FrameはCCmdTarget というクラスから派生しています。メニュー選択時のハンドらは基本的にCCmdTarget から派生したクラスで受け取ります。 アプリケーションの仕様にもよりますが、メニュー処理に適しているクラスで受け取るのがいいのではないでしょうか。

VitaminBB
質問者

お礼

回答ありがとうございます。 メニューの円をクリックするとクライアント領域に円が描画され、メニューの三角をクリックすると三角が描画されるような場合は、どちらに実装すれば良いでしょうか?

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

関連するQ&A

  • 【VC++】クラスの追加方法について

    VC++の操作方法についての質問です。 現在、VC++2005を用いて、MFCダイアログベースアプリケーションを作成しています。 クラスの追加方法についての質問ですが、 「クラスビュー」⇒「プロジェクト」で右クリック⇒「追加」⇒「クラス」でウィザードに従って追加すると、 ウィザード内で基本クラスをコンボボックスより選択しなければならず、 この方法で追加すると、選択した基本クラスを継承する形でクラスが自動生成され、クラスビューにマップと基本型が追加されます。 現在作成に当たって参照しているサンプルプログラムでは、新たにクラスが定義されているようですが、 マップと基本型は生成されておらず、基本クラスも定義されていないのです。 どのように操作すれば、サンプルのように基本クラスを定義せず、 マップと基本型も追加されずに、クラスを追加できるのでしょうか? また補足ですが、クラスを追加した後は、別の自分で定義した親クラスを継承させるようにコードを変更したいと思っております。 お分かりの方おられましたら、お手数ですがご教授お願い致します。

  • C#でメニューを動的に追加し、イベントを実装する

    C#でメニューの動的追加はわかるんですが、クリックイベントの実装がわかりません。 ただ単純に動的に追加したメニューをクリックすると、クリックしたメニューのキャプションをメッセージボックスで表示させたいです。 わかる方よろしくお願いします。

  • メニューのカスタマイズ

    EXCLEやWORDのメニューは、使用頻度の高い順に並び、かつ多いメニューは省略されて表示されます。 VC++で同様のメニューを実装する必要がでてきたのですが、このようなメニューを作成した経験のある方、その時の実装方法を教えていただけないでしょうか? よろしくお願い致します。 OS:Windows XP 開発環境:VS2005 MFC使用 MDIアプリケーション

  • 実行時に、メニューコントロールにアイテムを追加する方法

    お世話になっております。 実行時、コマンドボタン等を使って動的にメニューコントロールにアイテムを追加する方法がわかりません。 メニューコントロールは、情報が少ないので探しきれませんでした。 どなたか分かる方がいらっしゃれば教えてください。 環境は、win98+VB6.0です。

  • 住所録用クラスについて

    <環境> WIN98 VC++6.0 MFC  住所録用クラスを作ろうと思います。 特に基本クラスを設定するつもりは無いのですが、クラスの新規作成を選ぶと基本クラスを選択する必要が有りますよね。 このような場合は、何を選択すれば良いのでしょうか?

  • クラスについて

    環境 WIN2000 VC++6.0 MFC にて あるクラス(CShellListCtrlEx)内部に別のクラス(CCharEditEx)を作成することなんて可能なんでしょうか?。 ある程度は、できそうな気がするのですが・・・。 どうしても、仮想関数やWindowsメッセージハンドラが使えないで困っています。 どなたかご存知でしたら、ご教授お願いします。

  • CxxxViewのインスタンスはいつ作られるの?

    環境はWIN98 VC++6.0 MFCです。 今まで何も考えずウィザードに任せて、CxxxView内にコードを書いていましたが、良く考えるとCxxxViewってクラスですよね。 そうするとどこかでインスタンスが生成されていると思うのですが、どれはどこなのでしょうか?

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

    ここを参考に作りました。 http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html <仕様> メインフォームはタスクバーにアプリが表示されないようにするため、非表示にした。 メインフォームの代わりにモードレスダイアログを主ウィンドウとした。 ダイアログクラスの中に、タスクトレイにアイコンを表示してメニューを出すコードを記述した。 このような場合において、 メニューの中のID_Myxxxの実装をクラスウィザードを使って行うとき、 ダイアログクラス内に書くと問題ありませんが、 クラスウィザードを使ってクラス名でCMainFrameを選んでもオブジェクトIDにID_Myxxxが表示されるので、CMainFrameクラスに書いてみましたが実行されません。 どうしてこうなるのですか? ************************** 非常に分かりにくくて済みません。 簡単に書くと、 ダイアログクラスでメニューを表示した場合、 メニューの実装をダイアログクラスに書くと問題ないですが、CMainFrameクラスに書くと実行されません。 どうしてなのでしょうか?

  • 新規クラスの使い方

    <環境> WIN98 VC++6.0 MFC  デフォルトでプロジェクトを作成。 オリジナルの新規クラスを作成。 新規クラス内でXXview.h内で宣言した変数を使いたいので 新規クラス内で#include <XXview.h>とすると、 error C2143: 構文エラー : ';' が '*' の前に必要です。等のエラーが出ます。 これを回避する方法を教えてください。

  • 起動時のウィンドウサイズについて

    環境 WIN98 VC++6.0 MFC にて プロジェクトをウィザードに従い作成しました。 ステップ6/6にて基本クラスを CViewを選んだ場合 cs.cxでウィンドウサイズを画面いっぱいに広げることが出来ます。 CFormViewを選んだ場合 cs.cxの値が小さいうちは変化がありますが、あるサイズからはウィンドウが大きくなりません。 コードはウィザードが作ったオリジナルのままで、何も触っていません。 お分かりの方お願いします