すいません。書き間違えました。
EndWaitCursor();の前に}でした。
それでやってみましたが、子ウィンドの値を取得できませんでした。
...なんだかなー
http://cid-07c558f8e11e708f.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%
8b/VS2005Trials.zip
↑2005がないから開けなかったので、それっぽい所を何とかしてみた。
警告は出るけど2003で開けた。
*.sln 2行目
Microsoft Visual Studio Solution File, Format Version 9.00
↓
Microsoft Visual Studio Solution File, Format Version 8.00
*.vcproj 4行目
Version=8.00
↓
Version=7.10
お手数おかけしましたー
# インスコしとかにゃいかんかなぁ、VS2003とかVC++6とか。
# VirtualPCに突っ込んどきゃ邪魔にはならんが...ディスクの肥やしやなー
> それでやってみましたが、子ウィンドの値を取得できませんでした。
CChildDlg側でエディットボックスの入力値は取れているの?
void CChildDlg::OnBnClickedButton1() の内容を確認すること。
あのー。めっちゃ気になっているんですが。
ここ
> class CChildDlg : public CDialog
と
ここ
> CCustumDlg dlg(this);
で
クラス名が違うわけだから取れなくて当たり前と言う話はなし?
単にパンチミスならわかるけれど、
これだとそもそもビルドが通らないはずだし。
どうなってるんでしょ。
あれま。 ほんと、ぐちゃぐちゃ。
> DECLARE_DYNAMIC(CCustumDlg)
とか、
> virtual ~CCustumDlg();
とか。
前に指摘した
> a=a++;
もそのまま残っているし。
# 実際のプロジェクトからコピペしていないに一票。
> # 実際のプロジェクトからコピペしていないに一票。
質問者はビルドできていないって書いてますよ。
> エラーは
> error C2065: 'e' : 定義されていない識別子です。
>
> int eで定義しているので出ないと思うのですが・・・
int eが定義されているけど、それを参照できない場所で
エラーになっているのです。
エラーメッセージにはファイル名とか行番号とか書いてありませんか?
それと既に指摘されていますが、CChildDlgとCCustumDlgは、
それぞれ必要なのですか?
もしも混同していたり何のことか判らないようならば、
統一してください。それとa=a++;の修正もね。
>質問者はビルドできていないって書いてますよ。
あれ?
じゃあ、
> それでやってみましたが、子ウィンドの値を取得できませんでした。
はどういう意味だろう?
とにかく、質問者の方で一度状況を再整理して
全く状況が分からない人に一から説明するつもりで
内容を補足して貰わないと混乱するだけだと思います。
少なくとも提示するコードは、その現象がきちんと
再現する物で無いと提示する事でかえって混乱します。
正直な話、まずクラスとかその辺の勉強からした方が
良いのでは無いかと言う気もしますね。
C++言語の文法とかクラスの概念とかを理解しないと
MFCを使ってプログラミングするのは無理があると思います。
どこかでも書きましたけれど、
VC++でMFCを使ってアプリを作る勉強と
C++言語その物の勉強を同時にするのは無理です。
他の言語でもいいからきちんとプログラミングについて
理解した上でならまだ解りますけれど、
どうも書き込み内容を見る限りではその段階まで
至っていないような気がします。
恐らくこちらの説明も理解できないでいるのではないか
という気がします。
皆様、いろいろと有難うございます。
もう一度内容を説明いたします。
やりたいことは
親ウィンドのコンボボックスで3番目の項目を選択→子ウィンドが開かれる→子ウィンド
にある4つのエディットボックスに任意で数値をセット→子ウィンドにあるセットボタ
ンを押すとセットされた任意の数値を取得→エディットボックスで代入された数値を親
ウィンド側で受け取る→親ウィンドで撮影ボタンを押すとエディットボックス内の数値
を使用してカメラを動作させる
という流れです。
次にソースの説明をします。
//モーダルダイアログ作成(親ダイアログ)
void CParentDlg::OnCbnSelchangeComboBox1();
{
int i;
i = m_XXX.GetCursel();
if(i=2){ //コンボボックスの3番目が選択されたら子ウィンドを開く
CChildDlg dlg(this);
dlg.DoModal();
}
//子ダイアログのエディットボックス内数値取得
void CChildDlg::OnBnClickedButton1()
{
CString B,C,D,E;
GetDlgItemText(IDC_EDIT1, B); //エディットボックス1の数値を取得
GetDlgItemText(IDC_EDIT2, C); //エディットボックス2の数値を取得
GetDlgItemText(IDC_EDIT3, D); //エディットボックス3の数値を取得
GetDlgItemText(IDC_EDIT4, E); //エディットボックス4の数値を取得
//文字列から数字へ変換
int b = atoi(B);
int c = atoi(C);
int d = atoi(D);
int e = atoi(E);
OnOK(); //子ウィンドを閉じる
}
//親ダイアログの条件式に子ダイアログの値を使用
void CParentDlg::OnBnClickedRecord()
{
int nSts;
CString msg;
BOOL check;
DWORD timeCount = 0;
int a=0;
DWORD timeCount2 =0;
if(i==2){
Sleep(b); //ボタンを押してからb秒間待つ
~撮影開始処理省略~
while(a<e){ //aがe回になるまで繰り返す
timeCount = GetTickCount();
timeCount2 = 0;
while(timeCount2<c){ //c秒間撮影
timeCount2 = GetTickCount() - timeCount;
}
~撮影停止処理省略~
Sleep(d); //次の撮影までd秒間待つ
a=a+1; //aに1を足す
}
という感じです。
やりたいことは分かっていただけたでしょうか?
子ウィンドでは値は取得出来ていますが親ウィンドで子ウィンドで取得した値は使用で
きません。
取得した値を使用できるようにしたいんです。
ご指導お願いいたします。
ちなみに今まで書いたソースのCCustumDlgはCChildDlgと同じです。
いやだから
僕のコードは
読んだのか
επιστημηさん
いつもありがとうございます
//CChildDlg.h
class CChildDlg : CDialog {
int m_b;
int m_c;
int m_d;
int m_e;
public:
CString GetUSerInput() {
int GetB() { return m_b;}
int GetC() { return m_c;}
int GetD() { return m_d;}
int GetE() { return m_e;}
}
};
//CParentDlg.cpp内に
CChildDlg dlg(this);
if ( dlg.DoModal() == IDOK ) {
CString userInput = dlg.GetUserInput();
}
ですよね?
子ウィンドを開くスコープと子ウィンドで取得した値を使用するスコープが
異なる場所なんですがこれでつかえますか?
子ウィンドを開く→void CParentDlg::OnCbnSelchangeComboBox1();内
取得した値を使用→void CParentDlg::OnBnClickedRecord();内
>子ウィンドを開くスコープと子ウィンドで取得した値を使用するスコープが
>異なる場所なんですがこれでつかえますか?
当然使えないから、CParentDlgのメンバにコピーするしかないでしょうね。
> ですよね?
違う!!
どこからこんなコードが出てくるんだ!?
悪いことは言わないから、
> 正直な話、まずクラスとかその辺の勉強からした方が
> 良いのでは無いかと言う気もしますね。
に従って、勉強してから出直してきたら。