以前作成した子ダイアログを再利用したい

解決


GAKU  2010-06-03 22:06:38  No: 71692  IP: [192.*.*.*]

visual studio2005 C++ MFC dialogベース

ダイアログベースでプログラムを組んでいます。
あるボタンを押したら子ダイアログを開きたいのですが、
その子ダイアログは以前作成したプロジェクトの子ダイアログと全く同じ
なのでそのプロジェクトから持ってきたいのですが、やり方がわかりません。現在のプロジェクトに以前のプロジェクトを読み込んでコピーしたり
しましたが、エラーが出てなかなかうまく行きません。

よろしくお願いします。

編集 削除
310  2010-06-03 22:39:19  No: 71693  IP: [192.*.*.*]

私も初心者で、実際にやったことがあるわけではありませんが、
多分以下のファイルを修正すれば可能だと思います。

①cppファイルをコピー
②hファイルをコピー
③Resource.hを修正
④rcを修正

編集 削除
ryo  2010-06-04 00:08:02  No: 71694  IP: [192.*.*.*]

まず、VCを、何もファイルを読み込んでない状態で立ち上げる

次に
元プロジェクト.rc  と  今回のプロジェクト.rc  というファイルを
を各々ドラッグ&ドロップでVCに読み込ませます。

こうすれば、普段はcppやhファイルが表示される領域に
***.rcがツリー状態で表示されます
(「リソースビュー」ではなく)

この状態だと、2つの.rc間での、リソースのカット・コピーなどが可能になります
resouce.hなどの#defineも一緒にやってくれます。

移動させ終えたら、セーブして一旦終了します。

その後、新しい方のソリューションを立ち上げれば完了。

以上の方法は、リソースの移動だけなので
cppや.hは、ファイルをコピーなどして、新しいプロジェクトに登録する必要があります。
新しいフォルダに入れるだけではなく、ソリューションビューなどから
追加→既存の項目で追加してください。

編集 削除
GAKU  2010-06-05 09:39:24  No: 71695  IP: [192.*.*.*]

やってみました。
一応子ダイアログも読み込まれ、cpp,hも追加→既存の項目で追加しました。
ソルーションのクリーン、リビルドしたのですが以下のエラーが出ます。

ComPortDlg.hの16行目の// ダイアログ データ  
enum { IDD =IDD_DIALOG1 };の所で
エラー3  error C2065: 'IDD_DIALOG1' : 定義されていない識別子です。

子ダイアログのIDはIDD_DIALOG1なのですが、何故かダイログとクラスが
つながっていないようです。
以前のプロジェクトはこれで正常に動いているのですが。

原因がわかりましたら教えて頂きたいのですが。
よろしく願いします。

編集 削除
maru  2010-06-05 11:24:12  No: 71696  IP: [192.*.*.*]

> やってみました。
二つの方法が例示されていますが、何をやったんでしょうか?

> 原因がわかりましたら教えて頂きたいのですが。
コンパイルエラーはResource.h にダイアログIDが未定義だからでしょう。
#define IDD_DIALOG1 xxxx  // xxxxは使用されていないID番号
を追加するのが簡単な解決方法ですただし最後の方にある次に使用するID
も更新する必要があります。更新すべきIDは手元に環境がないのでいまは
わかりません。
IDD_DIALOG1にIDをわりあてるのにメニューからやる方法もあったような
気がしますが、これも環境がないので、...

編集 削除
GAKU  2010-06-05 18:49:12  No: 71697  IP: [192.*.*.*]

resource.hを見ると既に以下のようになっていました。
自分では追加していません。リソースをドラッグ&ドロップでコピー
した時に自動でやってくれたのかも。
#define IDR_MENU1                       129
#define IDD_DIALOG1                     129

#define _APS_NEXT_RESOURCE_VALUE        130

但し値がIDR_MENU1と同じだったので
#define IDD_DIALOG1                     130
#define _APS_NEXT_RESOURCE_VALUE        131
のように変更してやってみましたが、同じでした。

時間がないので、今回はゼロから作ることにしました。

310さん、ryoさん、maruさん  有難うございました。
今後ともよろしくお願いします。

編集 削除
ryo  2010-06-05 20:41:23  No: 71698  IP: [192.*.*.*]

resource.h
へのincludeがとっかで途切れてるんだろう

編集 削除
maru  2010-06-07 13:43:26  No: 71699  IP: [192.*.*.*]

> resource.hへのincludeがとっかで途切れてるんだろう
なるほど、こっちの問題か。

resource.hは"プロジェクト名.h"にインクルードされていて、ダイアログクラスのヘッダファイルも"プロジェクト名.h"をインクルードしているはず。
新規作成したプロジェクトの方では"プロジェクト名.h"のプロジェクト名の
部分が変わっているはずだからダイアログクラスのヘッダファイルから
"プロジェクト名.h"の部分を削除したものと考えられる。
そのためダイアログクラスのヘッダファイルはresource.hをインクルード
していない。
つまり、ダイアログクラスのヘッダファイルにresource.hをインクルード
すれば解決するんじゃないかな。

編集 削除