モダールさせるダイアログ内のピクチャーボックスに絵を書き込みたい – プログラミング – Home

モダールさせるダイアログ内のピクチャー...
 
通知
すべてクリア

モダールさせるダイアログ内のピクチャーボックスに絵を書き込みたい


ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

VC++6.0
OS XP
モダールさせるダイアログ内のピクチャーボックスに絵を書き込みたいのですが、うま
くいきません。どこが間違っているのでしょうか?
詳しい方、よろしくおねがいします。

CShow show; // 後から作成したダイアログクラス

CWnd* myPICT = GetDlgItem(IDC_PICT); // IDC_PICT はピクチャボックスのID
CClientDC myCLDC(myPICT) ;
CPen myPen1(PS_SOLID, 1, RGB(0,0,255));
CPen* oldPen = myCLDC.SelectObject(&myPen1);
myCLDC.Rectangle(2,140,12,130);

int nResponse = show.DoModal();


引用解決済
トピックタグ
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

そのソースだと、そもそもピクチャボックスと、モーダルダイアログ
との接点がありませんが。

モーダルダイアログにデータを渡したいのなら、コンストラクタなり
public メソッドなりを経由させて必要な情報を渡す必要があります。

なお、モーダルダイアログは DoModal() メソッドを呼び出すまでは
ウィンドウが生成されていないため、描画するために必要な情報だけ
を渡すようにします。(実際の描画は CShow 側が行なう。)


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

最初の書いている描画のコードは、
後で表示を指示しているダイアログに全く関係なく動いてますね。
そもそも表示もされていない物に描画なんてできませんし。

基本的にそのウインドウ内の描画はそのウインドウのクラスで行うのが
一番自然で無理がない実装になります。
で、描画に必要な情報はダイアログをDoModalする前に
予めダイアログに対して引き渡しておくのが普通でしょう。

引き渡し方としてはRAPTさんが書かれているように
publicのメソッドを使ってダイアログのメンバー変数に設定するとか
メンバー変数自体をpublicにしておいて直接設定するとかあると思います。
MFCではメンバー変数をpublicにしておいて直接使うと言う手段が割りと
多く使われていますけれど、本来はメンバー変数はprivateにしておいて
publicなメンバー関数で設定するのが本来の姿ですね。


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

RAPT 様、PATIO 様、ご解答ありがとうございます。
外部変数で必要な情報を渡し、コンストラクタで描画させてみます。


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

いえ、そうではなくて
CShowというダイアログクラスに引き渡す情報を保持する為のメンバー変数を追加します。
そのメンバー変数に対してダイアログを呼び出す側でCShowのインスタンスを作成後、
DoModalする前に情報を設定するのです。
こうすれば、DoModalを実行するときにはデータが引き渡し済みになります。
ちなみに描画に関してはOnDrawが適当だと思います。
他の場所に書いてもウインドウの上に他のウインドウが重なったりしたら
多分、描画結果が消えてしまいますよ。

Windowsでの画面の更新の仕組みとかC++言語でのクラスの考え方とか
勉強した方が良いと思いますよ。その辺の下敷きが無いと今後勉強を進めても
躓くと思いますので。


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

あっ、CDialogクラスの派生だったら、OnPaintですね。
失礼いたしました。


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

PATIO 様、ありがとうございます。
コーディングテストには、しばらく時間がかかります。
できしだい、UPいたしますので、しばらくおまちくださいませ。
<a href


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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