VC++ 6.0のダイアログベースでプログラムを作っているのですが、CXXXDlgクラスのダイアログ上のボタンをクリックして、CYYYDlgクラスのダイアログ上のピクチャーに画像を表示したいのですがどのようにすればいいのでしょうか?
CXXXDlgクラスのダイアログ上のピクチャーに表示することはできるのですが。
それと、VC++初心者にっとっておすすめのサイトがあれば教えてください。
よろしくお願いします。
SendMessageやPostMessageを使用すると実装が容易です
一例挙げます
操作側のボタンクリックのタイミングで画像のハンドルを作成しSendMessageで、ユーザイベントとして作成したハンドルを送ります
ユーザイベントを受信したダイアログは、ハンドルのピクチャをコピーし目的の処理を行いreturnします、このとき処理結果を返せます
対象ダイアログのハンドラが抜けると、操作側のSendMessageが戻るので、画像のハンドルを開放します(すでに表示側でコピー済みなはずです)
SendMessageの戻り値は表示側のハンドラでreturnした値が入っています
(途中で送ってしまいました)
ただし
上記例は、CXXXDlgとCYYYDlgが、対等関係の場合です
CXXXDlg内でCYYYDlgをクリエイトしている場合などは、こんな面倒な手間は要りません、相互にクラスメンバを参照できますからね
「初心者」ってことわりがあるので、
どの位初心者なのかな、と思うわけです。
「ビットマップ」ではなく「ピクチャ」と言っています。
>> 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 文だらけのプログラムを見るような気がしますね。
作者はいいのですが、そのプログラムを保守する別の人が大変でしょう。
時間がたつと自分でも訳わからなくなります。
あまり、おすすめではないです。
ツイート | ![]() |