初心者です。VCでこんなことできますか? – プログラミング – Home

初心者です。VCでこんなことできますか...
 
通知
すべてクリア

[解決済] 初心者です。VCでこんなことできますか?


初心者軍団の長
 初心者軍団の長
(@初心者軍団の長)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

VC初心者です。ご教授お願いします。VC++6.0を使っています。

みなさんはソースとかバリバリ載せて、それを
検討していてすごいですね。いつか私もそんな人になって
みたいと思います。

質問ですが、こんなことはできるのでしょうか?

ダイアログベースで作成した画面Aがあって、
この画面Aのどこかに、別ダイアログの画面Bを貼り付ける
ことは可能でしょうか。。。

理想を言うと、リソースビューで画面Aを編集している
状況の時に、画面A上に画面Bが見えていると最高です。。

何がしたいのかというと、画面毎に同じような仕様を実現
するために貼り付けられているコントロールを、一箇所に
収容して画面Bのプロジェクトとは別のプロジェクトで
管理できないかなあ。というのが意図なんです。
(画面Aと画面Bは平行で開発されていく感じで)
それで、画面Bから画面Aで用意したインタフェースを操作
して画面固有の機能を実現しようと。

※たぶん、ActiveXを作成すると解決できそうな気がして
 ますがVCのそれは複雑で手に負えません。もっと
 単純な方法はないのかな。

まだVCの世界を知らないので、正確な言葉で質問の意図が
伝わらないなとは思うのですが、よろしくお願いします。

※過去ログなど似た記載が無いかを見てましたが、チョット
 内容が難しいので恐縮ですが投稿しました。すいません。


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

なぜ、そんなことが必要なのかが分かりません。
管理を複雑にしたい?
1つのプロジェクトで完結しているなら、それで良いと思うのですが。

それともCOMサーバみたいなことがしたいのでしょうか?


返信引用
初心者軍団の長
 初心者軍団の長
(@初心者軍団の長)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

ご指摘ありがとうございます。
ご指摘の件、ごもっともです。

質問を投げた私が言うのもなんですが、自分でも
変だよなぁとは思います。
これは、上層部がすでに方針を決めているため、
私ではどうすることもできないのです。

#実は他にも作業規則というのか変な制約が
 あって詳細はいえませんが、画面Aのような既成の
 プログラムやリソース等の開発に関連するファイルに
 手を入れれば入れるほど作業工程的なコストがかさむ
 ような仕組みになっているのです。1プロジェクトファイル内で
 ガリガリと書くのは普通の手段だと思うのですが、
 制約上不利になるのです。例を言うと
 修正箇所のソースレビューは普通「修正箇所」ですが、ここでは
 その修正が影響を与えるであろう全経路(つまり関数の
 呼び出し元やメッセージの発生順序など)に及びます。
 既成のロジックになるべく影響を与えない作り方をあれこれ
 考えるうち(VCのことよく知らないのでモドカシイが)外だしした
 オブジェクトを操作する部位を「新規」に作るのはどうだろうという
 案に至ったわけです。

COMベースでの出来上がっている環境上で
構築するのも過去に案は出ていたようですが
(当時の判断なのでしょうか)採用されなかったようですね。
たしかに、こういう向きの作り方ですよね。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

…要はダイアログベース・アプリのロジック部とUIとを分離したい、ってことでしょか?


返信引用
初心者軍団の長
 初心者軍団の長
(@初心者軍団の長)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

即レスありがとうございます。

はい。1画面のロジック・UIを分離したいのです。

・既製ダイアログベースのロジックとUIはそのまま。
・新規追加分の仕様を満たすためのロジックとUIは別の
 プロジェクトファイルで作成
 (別プロジェクトファイルにするのは、理由があって、
  そうせざるを得ないです)
・新規追加分はダイアログベースで実装・デバッグするが、
 これはアプリとして使わずに、既成ダイアログベースのUIの
 一部に埋め込まれる。
・(上記の方法が実現できるのならば)既製ダイアログベース上の
 ロジック・UIの共通項を分離する予定。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

んー…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更新に必要なデータをくすねて絵を描く
}
...
};

とかなんとか。


返信引用
初心者軍団の長
 初心者軍団の長
(@初心者軍団の長)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

アップデートを通知する方法で派生クラス同士の連携をとる
手法ですね。

#Javaだったかなぁ。似たようなつくりをどこかで
見たような気がします。そうか考えたら手法であって
言語固有の「仕様」ではないですもんねVCでもできて
当たり前か。。。

アップデートの通知でもって画面機能を分離するインタフェースが
実装可能か検討してみます。まだ実装の工程には入っていないので、
吟味できます。

それから、私の検討ということになりますので、解決しました
とさせてください

行き詰るようなことになれば、いつか質問することもあると
思います。

επιστημηさん
RAPTさん
ご指導いただき、ありがとうございました。


返信引用
初心者軍団の長
 初心者軍団の長
(@初心者軍団の長)
ゲスト
結合: 19年前
投稿: 5
Topic starter  

すいません、解決チェック入れるの忘れました^^;


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

すでに解決しているようですが
>ダイアログベースで作成した画面Aがあって、
>この画面Aのどこかに、別ダイアログの画面Bを貼り付ける
>ことは可能でしょうか。。。
この部分だけ補足します。

コントロールにするダイアログリソースに
WS_VISIBLE と WS_CHILD と DS_CONTROLを付加しておけば
CDialog::Createで作成できます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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