VC初心者です。ご教授お願いします。VC++6.0を使っています。
みなさんはソースとかバリバリ載せて、それを
検討していてすごいですね。いつか私もそんな人になって
みたいと思います。
質問ですが、こんなことはできるのでしょうか?
ダイアログベースで作成した画面Aがあって、
この画面Aのどこかに、別ダイアログの画面Bを貼り付ける
ことは可能でしょうか。。。
理想を言うと、リソースビューで画面Aを編集している
状況の時に、画面A上に画面Bが見えていると最高です。。
何がしたいのかというと、画面毎に同じような仕様を実現
するために貼り付けられているコントロールを、一箇所に
収容して画面Bのプロジェクトとは別のプロジェクトで
管理できないかなあ。というのが意図なんです。
(画面Aと画面Bは平行で開発されていく感じで)
それで、画面Bから画面Aで用意したインタフェースを操作
して画面固有の機能を実現しようと。
※たぶん、ActiveXを作成すると解決できそうな気がして
ますがVCのそれは複雑で手に負えません。もっと
単純な方法はないのかな。
まだVCの世界を知らないので、正確な言葉で質問の意図が
伝わらないなとは思うのですが、よろしくお願いします。
※過去ログなど似た記載が無いかを見てましたが、チョット
内容が難しいので恐縮ですが投稿しました。すいません。
なぜ、そんなことが必要なのかが分かりません。
管理を複雑にしたい?
1つのプロジェクトで完結しているなら、それで良いと思うのですが。
それともCOMサーバみたいなことがしたいのでしょうか?
ご指摘ありがとうございます。
ご指摘の件、ごもっともです。
質問を投げた私が言うのもなんですが、自分でも
変だよなぁとは思います。
これは、上層部がすでに方針を決めているため、
私ではどうすることもできないのです。
#実は他にも作業規則というのか変な制約が
あって詳細はいえませんが、画面Aのような既成の
プログラムやリソース等の開発に関連するファイルに
手を入れれば入れるほど作業工程的なコストがかさむ
ような仕組みになっているのです。1プロジェクトファイル内で
ガリガリと書くのは普通の手段だと思うのですが、
制約上不利になるのです。例を言うと
修正箇所のソースレビューは普通「修正箇所」ですが、ここでは
その修正が影響を与えるであろう全経路(つまり関数の
呼び出し元やメッセージの発生順序など)に及びます。
既成のロジックになるべく影響を与えない作り方をあれこれ
考えるうち(VCのことよく知らないのでモドカシイが)外だしした
オブジェクトを操作する部位を「新規」に作るのはどうだろうという
案に至ったわけです。
COMベースでの出来上がっている環境上で
構築するのも過去に案は出ていたようですが
(当時の判断なのでしょうか)採用されなかったようですね。
たしかに、こういう向きの作り方ですよね。
…要はダイアログベース・アプリのロジック部とUIとを分離したい、ってことでしょか?
即レスありがとうございます。
はい。1画面のロジック・UIを分離したいのです。
・既製ダイアログベースのロジックとUIはそのまま。
・新規追加分の仕様を満たすためのロジックとUIは別の
プロジェクトファイルで作成
(別プロジェクトファイルにするのは、理由があって、
そうせざるを得ないです)
・新規追加分はダイアログベースで実装・デバッグするが、
これはアプリとして使わずに、既成ダイアログベースのUIの
一部に埋め込まれる。
・(上記の方法が実現できるのならば)既製ダイアログベース上の
ロジック・UIの共通項を分離する予定。
んー…Observer-patternで解決できるんかしら。
class UI;
class Logic {
UI* ui_;
public:
void setUI(UI* ui) { ui_ = ui; }
void notify();
};
class UI {
public:
virtual ~UI() {}
virtual void update(Logic*) =0;
};
void Logic::notify() { ui_->update(this); }
// ------------------
class MyLogic : public Logic {
public:
void なんかする() {
// Logicごにょごにょ
if ( UI要更新 ) notify();
}
...
};
class MyDialog : public CDialog, virtual public UI {
MyLogic* logic_;
public:
void ボタンが押された() {
logic_->なんかする();
}
virtual void update(Logic*) {
logic_からUI更新に必要なデータをくすねて絵を描く
}
...
};
とかなんとか。
アップデートを通知する方法で派生クラス同士の連携をとる
手法ですね。
#Javaだったかなぁ。似たようなつくりをどこかで
見たような気がします。そうか考えたら手法であって
言語固有の「仕様」ではないですもんねVCでもできて
当たり前か。。。
アップデートの通知でもって画面機能を分離するインタフェースが
実装可能か検討してみます。まだ実装の工程には入っていないので、
吟味できます。
それから、私の検討ということになりますので、解決しました
とさせてください
行き詰るようなことになれば、いつか質問することもあると
思います。
επιστημηさん
RAPTさん
ご指導いただき、ありがとうございました。
すいません、解決チェック入れるの忘れました^^;
すでに解決しているようですが
>ダイアログベースで作成した画面Aがあって、
>この画面Aのどこかに、別ダイアログの画面Bを貼り付ける
>ことは可能でしょうか。。。
この部分だけ補足します。
コントロールにするダイアログリソースに
WS_VISIBLE と WS_CHILD と DS_CONTROLを付加しておけば
CDialog::Createで作成できます。