MDI子ウィンドウに 定期的に別々のグラフを描画 – プログラミング – Home

MDI子ウィンドウに 定期的に別々のグ...
 
通知
すべてクリア

MDI子ウィンドウに 定期的に別々のグラフを描画


あぶ
 あぶ
(@あぶ)
ゲスト
結合: 21年前
投稿: 4
Topic starter  

 VC++6.0でMFC、MDI(Formベース)で 刻々変化する数種類の実験データ項目(温度、電圧
など)をそれぞれ別の子ウィンドウに表示しようとしておりますが、どうもうまくいきません。
VBから転向したばかりでウィンドやViewの扱いに今一しっくりしていないので、初心者向けの
ご説明を頂けたら幸いです。
 使用するタイマーは全体タイマーの一つのみ,子ウィンドウは6つのグラフ・データ数値表示
(EditBox)用

1、子ウィンドウ作成はPostMessageを使用し、テンプレートのFormViewが作成されます。
  (どうしてもLoadFrameでテンプレートのFormを呼び出せなかったので…)
2、CDC* の配列変数を作成して、子ウィンドウ作成時にCDCを保存。
  (ViewのInitialUpdate内で処理、MainFrame内の子ウィンドウ作成用関数内でも試す)
3、MainFrameのOnTimerで 実験値取得後、InvaidateRect(NULL);
4、OnDrawで
  for(i=1;i<WndCount;i++) // WndCount:作成したウィンドウ数
{
pDC=WndCDC[i];      // WndCDC[]:CDC*を保存してある配列変数
   for(l=1;l<DataCount-1,l++)
{
pDC-> グラフ描画;
}
    EditBoxへデータの表示;
}
  としたのですが… グラフ描画の所でエラー発生!です。

<今までの調査結果>
「2」の配列変数にはうまくCDC*が代入されているようですが、いざ「4」で使おうとすると
きには、配列変数CDC*のメンバーm_hDCやm_hAtrribDCが参照されない。これがエラーの原
因?

 以上 とんちんかんなところもあるかもしれません。よろしくお願いいたします。     
           のん兵衛 あぶ


引用解決済
トピックタグ
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

>グラフ描画の所でエラー発生!です。
何というエラーが発生するのですか?


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

失礼しました。エラーメッセージですが
実行時には
Debug Assertion Failed!

For Information on how your program can cause an assertion failure,
seethe Visual C++ documentation on asserts

と出て、kernell32.dll エラー となります。
デバッグを実行しますと、混合モード画面が表示され
「ブレークポイントの設定位置」とメッセージが出てとまります。

遅れましたが WindowsME上で作成しています。
よろしくお願いいたします。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

え~と、Debug Assertion Failed!のダイアログに

File:xxxx.cpp
Line:nnn

とか出てきていないですか?

それと、
>CDC* の配列変数を作成して
とありますが、具体的にどのように書いていますか?


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

エラーメッセージですが、
File Windgi.cpp Line 583 で 
グラフ描画の最初の行がMoveToになっているため、
CPoint CDC::MoveTo 関数の中です。

配列変数は、一応色々と試すため、グローバルで宣言してあります。

宣言 CDC* WndCDC[10];
使用するとき extern CDC* WndCDC[10]; としてから使用しています。

よろしくお願いいたします。


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 たとえばGetDCでポインタを取得してた場合、、、
 「後で使用するために保存しておくことはできません。」となっています。
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vclib/html/_mfc_cwnd.3a3a.getdc.asp


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

情報ありがとうございます。
たしかに、GetDCで取得しておりました。
ページを確認いたしましたが、「一時的なもの」なのですね。う~む。

 とすると、そもそもその都度状況を確認するという考え方に変えなければ
ならない…わけですね。では、子ウィンドウ作成時に何か識別できるような印
(ウィンドウタイトルなどで)をつけておいて、それをたよりに見分ける
方法をこれから試して見ます。

nさん、NEGさん ありがとうございました。試してみまして、判らないことが
出てきましたら、またよろしくお願いいたします。 


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

仕様が良く分からないので的外かもしれませんが、
ウインドウの生成を親がしているのであれば、
ウインドウのインスタンスは親が管理しているのではないでしょうか?
親が管理しているのであれば、どのウインドウが何を表示すべきなのかも
当然分かっていると思うのですが。違うのでしょうか?

あとMFCを使っていると言うことですが、私が思うにそれぞれのウインドウ上の描画は
それぞれのウインドウのインスタンス側で行うのが普通ではないかと思います。
ウインドウ側にデータの更新を通知してウインドウ側でデータを参照して
描画するようにすれば、全体の構成もすっきりしないでしょうか。

描画のロジックが同じでそれをそれぞれに書きたくないというのであれば、
クラスとしては一つにしてインスタンスを複数起こせば良いような気もしますし。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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