ダイアログ間で処理をするには?


れこ  2004-11-23 03:56:27  No: 55291

VC++ 6.0のダイアログベースでプログラムを作っているのですが、CXXXDlgクラスのダイアログ上のボタンをクリックして、CYYYDlgクラスのダイアログ上のピクチャーに画像を表示したいのですがどのようにすればいいのでしょうか?
CXXXDlgクラスのダイアログ上のピクチャーに表示することはできるのですが。
それと、VC++初心者にっとっておすすめのサイトがあれば教えてください。
よろしくお願いします。


克己  2004-11-26 08:13:45  No: 55292

SendMessageやPostMessageを使用すると実装が容易です
一例挙げます
操作側のボタンクリックのタイミングで画像のハンドルを作成しSendMessageで、ユーザイベントとして作成したハンドルを送ります
ユーザイベントを受信したダイアログは、ハンドルのピクチャをコピーし目的の処理を行いreturnします、このとき処理結果を返せます
対象ダイアログのハンドラが抜けると、操作側のSendMessageが戻るので、画像のハンドルを開放します(すでに表示側でコピー済みなはずです)
SendMessageの戻り値は表示側のハンドラでreturnした値が入っています


克己  2004-11-26 08:18:24  No: 55293

(途中で送ってしまいました)
ただし
上記例は、CXXXDlgとCYYYDlgが、対等関係の場合です
CXXXDlg内でCYYYDlgをクリエイトしている場合などは、こんな面倒な手間は要りません、相互にクラスメンバを参照できますからね


なーめ  2004-12-03 23:47:05  No: 55294

「初心者」ってことわりがあるので、

どの位初心者なのかな、と思うわけです。
「ビットマップ」ではなく「ピクチャ」と言っています。

>> VC++初心者にっとっておすすめのサイト
http://www.kumei.ne.jp/c_lang/index.html
どうですかね。

SendMessage が分かるのかな?
WM_USER + いくつ
を使う?
モーダル/モードレス
の違いとか、大丈夫?

CYYYDlg がピクチャを表示するようにつくり、
CXXXDlg でボタンを押すと OnXXXXBtn() が呼ばれるとする。
## ボタンのID は IDC_X_X_X_X_BTN ?? (^^;;

#include "YYYDlg.h"
CXXXDlg::OnXXXXBtn()
{
   CYYYDlg dlg;
   dlg.DoModal();
}

でよいとか言わない?

>> 相互にクラスメンバを参照

両方とも コードレベルで同じダイアログならいいです。
一方が他方を知っているのもいいですが、相互参照となると、どうかな。
なにか goto 文だらけのプログラムを見るような気がしますね。
作者はいいのですが、そのプログラムを保守する別の人が大変でしょう。
時間がたつと自分でも訳わからなくなります。
あまり、おすすめではないです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加