モーダルダイアログ – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] モーダルダイアログ

固定ページ 2 / 3

ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

すいません。書き間違えました。

EndWaitCursor();の前に}でした。

それでやってみましたが、子ウィンドの値を取得できませんでした。


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

...なんだかなー

http://cid-07c558f8e11e708f.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%
8b/VS2005Trials.zip


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

↑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


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

お手数おかけしましたー
# インスコしとかにゃいかんかなぁ、VS2003とかVC++6とか。
# VirtualPCに突っ込んどきゃ邪魔にはならんが...ディスクの肥やしやなー


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> それでやってみましたが、子ウィンドの値を取得できませんでした。
CChildDlg側でエディットボックスの入力値は取れているの?
void CChildDlg::OnBnClickedButton1() の内容を確認すること。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

あのー。めっちゃ気になっているんですが。

ここ
> class CChildDlg : public CDialog

ここ
> CCustumDlg dlg(this);

クラス名が違うわけだから取れなくて当たり前と言う話はなし?
単にパンチミスならわかるけれど、
これだとそもそもビルドが通らないはずだし。
どうなってるんでしょ。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

あれま。 ほんと、ぐちゃぐちゃ。
> DECLARE_DYNAMIC(CCustumDlg)
とか、
> virtual ~CCustumDlg();
とか。

前に指摘した
> a=a++;
もそのまま残っているし。

# 実際のプロジェクトからコピペしていないに一票。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> # 実際のプロジェクトからコピペしていないに一票。

質問者はビルドできていないって書いてますよ。

> エラーは
> error C2065: 'e' : 定義されていない識別子です。
>
> int eで定義しているので出ないと思うのですが・・・

int eが定義されているけど、それを参照できない場所で
エラーになっているのです。
エラーメッセージにはファイル名とか行番号とか書いてありませんか?

それと既に指摘されていますが、CChildDlgとCCustumDlgは、
それぞれ必要なのですか?
もしも混同していたり何のことか判らないようならば、
統一してください。それとa=a++;の修正もね。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

>質問者はビルドできていないって書いてますよ。
あれ?

じゃあ、
> それでやってみましたが、子ウィンドの値を取得できませんでした。
はどういう意味だろう?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

とにかく、質問者の方で一度状況を再整理して
全く状況が分からない人に一から説明するつもりで
内容を補足して貰わないと混乱するだけだと思います。

少なくとも提示するコードは、その現象がきちんと
再現する物で無いと提示する事でかえって混乱します。

正直な話、まずクラスとかその辺の勉強からした方が
良いのでは無いかと言う気もしますね。
C++言語の文法とかクラスの概念とかを理解しないと
MFCを使ってプログラミングするのは無理があると思います。

どこかでも書きましたけれど、
VC++でMFCを使ってアプリを作る勉強と
C++言語その物の勉強を同時にするのは無理です。
他の言語でもいいからきちんとプログラミングについて
理解した上でならまだ解りますけれど、
どうも書き込み内容を見る限りではその段階まで
至っていないような気がします。
恐らくこちらの説明も理解できないでいるのではないか
という気がします。


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

皆様、いろいろと有難うございます。

もう一度内容を説明いたします。
やりたいことは
親ウィンドのコンボボックスで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と同じです。


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

いやだから
 僕のコードは
  読んだのか


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

επιστημηさん
いつもありがとうございます

//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();内


返信引用
PSB
 PSB
(@PSB)
ゲスト
結合: 20年前
投稿: 7
 

>子ウィンドを開くスコープと子ウィンドで取得した値を使用するスコープが
>異なる場所なんですがこれでつかえますか?

当然使えないから、CParentDlgのメンバにコピーするしかないでしょうね。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> ですよね?
違う!!
どこからこんなコードが出てくるんだ!?

悪いことは言わないから、
> 正直な話、まずクラスとかその辺の勉強からした方が
> 良いのでは無いかと言う気もしますね。
に従って、勉強してから出直してきたら。


返信引用
固定ページ 2 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

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