- ベストアンサー
CFromViewのOnDrawメソッドについて
- MFC初心者のため、CViewクラスとCFromViewクラスのOnDrawメソッドについて質問します。
- CViewクラスではOnDraw(CDC* pDC)が定義されており、描画コードを直接書くことができますが、CFromViewクラスではOnDraw(CDC* pDC)が見当たりません。
- CFromViewクラスでも描画コードを書くために、void OnDraw(CDC* pDC)を追加して表示させる方法を試しましたが、正しい方法でしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>直接書きとコントロールは完全にすみ分けして使うのが >標準ということでしょうか? "標準"と言いきっていいのか否かはわかりませんが、 その方がプログラミングし易いとは感じています。 >CFromViewクラスを使った理由はコントロールも使いたかった為です。 コントロールの数や大きさ等にもよりますが、 CDialogBarを使う手もあります。 ("リボン"はこの発展形になります) ツールバーにエディット等各種コントロールを搭載可能にしたものです。 あまりにコントロールが多くて、CDialogBarが巨大になってしまうのなら、 CSplitWndを用いて左右(もしくは上下)に分割し 片方にCFormView,他方にCViewを表示する ことも可能です。 どうしても一つのウィンドウにまとめたいなら あなたのやったようにOnDraw()のオーバーライドもありかなと思います。 CViewでチャイルドを作成する方法もあり、 こっちのほうがオーソドックスな気がしないでもないですが、 コントロールの配置を自分でコーディングしなくてはならないので、 コントロールの数が多い場合には難しい(というか面倒)ですね。 私の結論としては A) 基本的にはコントロールとView(FormViewを除く)は分離したほうが、 プログラミングもしやすいし、使いやすい B)コントロールの数が少数であれば、ダイアログバーやリボンをつかうと 現代的で見栄えもよい C)コントロールが多数配置され、かつ、CView(CFormViewを除く)も使いたいなら、 スプリット・ウィンドウで分離させると作りやすい D)どうしても一つのウィンドウにまとめたい (ex. コントロールの背景に描画したい) 場合なら、OnDraw()をオーバーライドすればよい こんな感じです
その他の回答 (1)
- BLK314
- ベストアンサー率55% (84/152)
>ドキュメント(で正しいでしょうか?)がCViewクラスの場合 ドキュメントではありません。ビューの誤りです。 >CFromViewクラス(コントロール可能)の場合、 >OnDraw(CDC* pDC)が見当たりませんので、 >定義にvoid OnDraw(CDC* pDC)を追加し、 >以下のようにメソッドを追加して、無理やり表示させました。 >この方法は普通でしょうか? なぜに、CFromViewを選択されたのですか? CViewやCScrollViewを選ばずにCFromViewを選択された理由を知りたいです。 通常、CFromViewはダイアログのように、 エディットやリストボックスなどのチャイルドを貼り付ける入れ物にするために 利用されます。 例えば、データとして"ABCD"という文字列があり、 これを表示したい場合 CViewやCScrollViewなどでは、 OnDrawでTextOut, DrawTextなどを用いて "View自身がデータを表示” します。 これに対し、CFormViewでは チャイルドのテキストボックス等を用いて表示します。 "View自身はデータを表示せず、チャイルドを用いて表示” します。 CFormView自身はデータを表示しないのが普通なので OnDrawが提供されていないのです。 きちんとドキュメント/ビュー アーキテクチャの基礎を学習し、 合わせて、各Viewの特徴も学習されることをお勧めします。
補足
詳しい説明ありがとうございます。 CFromViewクラスを使った理由はコントロールも使いたかった為です。 コントロールも使えて、直接書きもできるのはCFromViewクラスかなと思いました。 メソッド?にOnDrowが無かったので、これは無理やり表示ができても、お勧めできない方法かなと思いましたので、別の良い方法があるのかお聞きしたかったです。 直接書きとコントロールは完全にすみ分けして使うのが標準ということでしょうか?