visual studio2005 C++ MFC dialogベース
ダイアログベースでプログラムを組んでいます。
あるボタンを押したら子ダイアログを開きたいのですが、
その子ダイアログは以前作成したプロジェクトの子ダイアログと全く同じ
なのでそのプロジェクトから持ってきたいのですが、やり方がわかりません。現在のプロジェクトに以前のプロジェクトを読み込んでコピーしたり
しましたが、エラーが出てなかなかうまく行きません。
よろしくお願いします。
私も初心者で、実際にやったことがあるわけではありませんが、
多分以下のファイルを修正すれば可能だと思います。
①cppファイルをコピー
②hファイルをコピー
③Resource.hを修正
④rcを修正
まず、VCを、何もファイルを読み込んでない状態で立ち上げる
次に
元プロジェクト.rc と 今回のプロジェクト.rc というファイルを
を各々ドラッグ&ドロップでVCに読み込ませます。
こうすれば、普段はcppやhファイルが表示される領域に
***.rcがツリー状態で表示されます
(「リソースビュー」ではなく)
この状態だと、2つの.rc間での、リソースのカット・コピーなどが可能になります
resouce.hなどの#defineも一緒にやってくれます。
移動させ終えたら、セーブして一旦終了します。
その後、新しい方のソリューションを立ち上げれば完了。
以上の方法は、リソースの移動だけなので
cppや.hは、ファイルをコピーなどして、新しいプロジェクトに登録する必要があります。
新しいフォルダに入れるだけではなく、ソリューションビューなどから
追加→既存の項目で追加してください。
やってみました。
一応子ダイアログも読み込まれ、cpp,hも追加→既存の項目で追加しました。
ソルーションのクリーン、リビルドしたのですが以下のエラーが出ます。
ComPortDlg.hの16行目の// ダイアログ データ
enum { IDD =IDD_DIALOG1 };の所で
エラー3 error C2065: 'IDD_DIALOG1' : 定義されていない識別子です。
子ダイアログのIDはIDD_DIALOG1なのですが、何故かダイログとクラスが
つながっていないようです。
以前のプロジェクトはこれで正常に動いているのですが。
原因がわかりましたら教えて頂きたいのですが。
よろしく願いします。
> やってみました。
二つの方法が例示されていますが、何をやったんでしょうか?
> 原因がわかりましたら教えて頂きたいのですが。
コンパイルエラーはResource.h にダイアログIDが未定義だからでしょう。
#define IDD_DIALOG1 xxxx // xxxxは使用されていないID番号
を追加するのが簡単な解決方法ですただし最後の方にある次に使用するID
も更新する必要があります。更新すべきIDは手元に環境がないのでいまは
わかりません。
IDD_DIALOG1にIDをわりあてるのにメニューからやる方法もあったような
気がしますが、これも環境がないので、...
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さん 有難うございました。
今後ともよろしくお願いします。
resource.h
へのincludeがとっかで途切れてるんだろう
> resource.hへのincludeがとっかで途切れてるんだろう
なるほど、こっちの問題か。
resource.hは"プロジェクト名.h"にインクルードされていて、ダイアログクラスのヘッダファイルも"プロジェクト名.h"をインクルードしているはず。
新規作成したプロジェクトの方では"プロジェクト名.h"のプロジェクト名の
部分が変わっているはずだからダイアログクラスのヘッダファイルから
"プロジェクト名.h"の部分を削除したものと考えられる。
そのためダイアログクラスのヘッダファイルはresource.hをインクルード
していない。
つまり、ダイアログクラスのヘッダファイルにresource.hをインクルード
すれば解決するんじゃないかな。