分割ウィンドウ使用時の異なるクラス間のDC使用法 – プログラミング – Home

分割ウィンドウ使用時の異なるクラス間の...
 
通知
すべてクリア

[解決済] 分割ウィンドウ使用時の異なるクラス間のDC使用法


PON
 PON
(@PON)
ゲスト
結合: 18年前
投稿: 21
Topic starter  

いつも拝見させていただいています。
PON@VC++初心者と申します。
過去ログを調べたのですが、どうも今1つわからないので、
すいませんが、どなたか教えてください。

[環境]VisualStdio .NET 2005 VC++
[状況]
・新規sln作成 CFormView、分割有りで生成
・ウィンドウを2つに分割(左右)し、右がFormViewクラス、左がCViewクラスとする
・右のFormViewに1つボタンを追加
・そのボタンを押すことで、何かしらの表示(たとえば四角枠を表示するとか)を
 左のVIEWにしたい

左のCVIEWの中で、四角枠をだすのはOnDrawの引数(CDC *pDC)を使えば、
表示できるのですが、右のCFormViewから左のCVIEWのDCにアクセスする方法は
どのようにすればいいのでしょうか?
それとも、DCを使わずに、ウィンドウハンドルとかで描画できるのかな、、、?

おそらく、デバイスコンテキストとウィンドウハンドルが、まだよく
わかっていないためだと思います。

すいませんが、どなたか教えてください。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

通常、そのウインドウ内の描画は、そのウインドウクラスでするべきです。
なのでCFormViewからCViewに対して描画内容を伝える形で通知を行い、
CView自身に描画させるべきでしょう。
それに、CViewのOnDrawに描画を行うルーチンが無いと他のウインドウが重なったり、
最小化して元に戻した時などに再描画する事が出来ずに真っ白になったりしますよ。

この辺は、Windowsでの描画の仕組みをきちんと理解しておく方が良いと思います。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

基本に沿った作り方をするならば、CDocumentクラスを仲介しましょう。
CViewは、CDocumentの内容を表示するためのものですので、
まずCDocumentが、「何もない」状態から「四角枠」の状態に変わる必要があります。

CFormViewのボタンを押したときのイベントで、
CDocumentに自作したメンバ関数を呼び出し、状態を変更します。
その後、他のViewに(ここではCView)CDocumentが更新され、
現在の表示が古くなっていることを伝えるために、UpdateAllViewsを呼びます。

これによって、各ViewのOnUpdateが呼ばれ、デフォルトの処理では、
画面の再描画が行われます。

画面の描画はOnDrawでされますが、この処理はボタンを押される前にも
呼ばれるので、OnDrawからCDocumentの状態を確認して、
何も描かないのか、四角枠を描くのかを決定します。


返信引用
PON
 PON
(@PON)
ゲスト
結合: 18年前
投稿: 21
Topic starter  

>PATIOさん
>たいちうさん

ご返信ありがとうございます。
お二方の意見を参考に、やってみます。

うまくできたらご報告しますが、何かひっかかったら、
また皆様、ご教授お願いします。

ひとまず、これで。


返信引用
PON
 PON
(@PON)
ゲスト
結合: 18年前
投稿: 21
Topic starter  

やってみました!
・Docクラスにデータとフラグを持たせ
・FormViewでのイベント発生時には、そのフラグをONし、UpdateAllViewsを呼ぶ
・CVIEWのOnDrawでは、フラグON時のみDocクラスからデータを引っ張りだして
 CDCで表示
という3段階で設計してみました。

うまくはいくのですが、結構面倒なのですね。。。(^^;
まあ、慣れるしかないと思います。

どうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました