いつも拝見させていただいています。
PON@VC++初心者と申します。
過去ログを調べたのですが、どうも今1つわからないので、
すいませんが、どなたか教えてください。
[環境]VisualStdio .NET 2005 VC++
[状況]
・新規sln作成 CFormView、分割有りで生成
・ウィンドウを2つに分割(左右)し、右がFormViewクラス、左がCViewクラスとする
・右のFormViewに1つボタンを追加
・そのボタンを押すことで、何かしらの表示(たとえば四角枠を表示するとか)を
左のVIEWにしたい
左のCVIEWの中で、四角枠をだすのはOnDrawの引数(CDC *pDC)を使えば、
表示できるのですが、右のCFormViewから左のCVIEWのDCにアクセスする方法は
どのようにすればいいのでしょうか?
それとも、DCを使わずに、ウィンドウハンドルとかで描画できるのかな、、、?
おそらく、デバイスコンテキストとウィンドウハンドルが、まだよく
わかっていないためだと思います。
すいませんが、どなたか教えてください。
通常、そのウインドウ内の描画は、そのウインドウクラスでするべきです。
なのでCFormViewからCViewに対して描画内容を伝える形で通知を行い、
CView自身に描画させるべきでしょう。
それに、CViewのOnDrawに描画を行うルーチンが無いと他のウインドウが重なったり、
最小化して元に戻した時などに再描画する事が出来ずに真っ白になったりしますよ。
この辺は、Windowsでの描画の仕組みをきちんと理解しておく方が良いと思います。
基本に沿った作り方をするならば、CDocumentクラスを仲介しましょう。
CViewは、CDocumentの内容を表示するためのものですので、
まずCDocumentが、「何もない」状態から「四角枠」の状態に変わる必要があります。
CFormViewのボタンを押したときのイベントで、
CDocumentに自作したメンバ関数を呼び出し、状態を変更します。
その後、他のViewに(ここではCView)CDocumentが更新され、
現在の表示が古くなっていることを伝えるために、UpdateAllViewsを呼びます。
これによって、各ViewのOnUpdateが呼ばれ、デフォルトの処理では、
画面の再描画が行われます。
画面の描画はOnDrawでされますが、この処理はボタンを押される前にも
呼ばれるので、OnDrawからCDocumentの状態を確認して、
何も描かないのか、四角枠を描くのかを決定します。
>PATIOさん
>たいちうさん
ご返信ありがとうございます。
お二方の意見を参考に、やってみます。
うまくできたらご報告しますが、何かひっかかったら、
また皆様、ご教授お願いします。
ひとまず、これで。
やってみました!
・Docクラスにデータとフラグを持たせ
・FormViewでのイベント発生時には、そのフラグをONし、UpdateAllViewsを呼ぶ
・CVIEWのOnDrawでは、フラグON時のみDocクラスからデータを引っ張りだして
CDCで表示
という3段階で設計してみました。
うまくはいくのですが、結構面倒なのですね。。。(^^;
まあ、慣れるしかないと思います。
どうもありがとうございました。