- ベストアンサー
変数について
.net2003でMFCダイアログを作成中です。 今AダイアログとBダイアログがあります。 Bにはエディットボックスが1つあり、 Aにはボタンが1つあります。 Aにあるボタンを初めて押下した場合にはBのエディットボックス内に [1]を。 Bを閉じて再びAにあるボタンを(2回目)押下した場合にはBのエディットボックス内には[2]と表示させたいです。 これの繰り返しを行いたいのですが、どのようなプログラムにすればよいのでしょうか? Aヘッダで int aaa; // ボタンを押した回数を保存する変数 A.cpp AのOnBnButtonClicked関数内に aaa += 1; //もちろんOnInit内で初期化済み として B.cpp内で if(aaa == 1){ ....... } とやろうとしたのですが当然怒られてしまいます。 ご教授の程よろしくお願いいたします。
- doborn
- お礼率41% (88/210)
- C・C++・C#
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
B.cppに extern int aaa;
関連するQ&A
- c++ 変数を1度使ったら削除する等
変数を1度使ったらなくなるようにしたいです。 今、MFCでダイアログを作成しているのですが AとBのダイアログがあります。 AのOnBnButtonClicked()内で CBDlg dlg; dlg.DoModal(); と作成し、ボタンが押されるとBのダイアログが呼び出されるようにしました。 Bにはエディットボックスがあり、 呼び出されたB内でエディットボックス内を変更します。 最初(1回目)に呼び出した場合にはエディットボックス内に0と表示させておきたいです。 Bを閉じて、もう一度ボタン押下でBを呼び出しても先ほど変更した内容が表示されている、というようにしたいです。 そのためにif文で if(Bが初めて呼び出されたとき){ エディットボックスに0を表示; } else if(2回目以降){ 先ほど編集したデータ; } というようにしようと自分の中では考えています。 Bのダイアログが初めて呼び出されたときを0として int i = 0; if(i == 0)...... として それ以降1回呼び出されるごとにiを +1していきたいです。 そうするために int i = 0; を初期化で設定する必要があるのですが そう設定するとBのダイアログが呼び出されるたびに i = 0; されてしまい困っています。 わかりにくい説明かと思いますが、説明不足であれば補足要求をお願いいたします。 ご教授いただきたく思います。
- 締切済み
- C・C++・C#
- 文字列と変数の値をエディットボッスクに表示させたい
VC++6.0,MFC,ダイアログベースでプログラミングしています。 エディットボックスに文字列と変数の値を表示させたいのですが、その方法が分かりません・・。 コンソールベースの場合の、 int a=1; printf("a = %d",a); で、「a = 1」と出力されるようにしたいです。 今は、 m_Display = "a = %d"; UpdateData(FALSE); UpdateWindow(); というように作っているので、上記と同様にできませんでした。 このような場合どうしたらよいのでしょうか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 子ダイアログのデータを親ダイアログで取得するには
VC6.0にてMFCでダイアログベースアプリケーションを作成しています。 親ダイアログ(TestDlg.cpp)のメニューを選択すると、子ダイアログ(SetDlg.cpp)が開き、テキストボックスに文字を入力し、ボタン押下によりテキストボックスの入力数字を確定(グローバル変数(igStatu)に代入)しています。 子ウインドウで入力確定したデータを、親ダイアログにて使用したいのですが、データが受け渡されずに、親ダイアログ側にデータが入りません。 どのようにしたら、子ダイアログで設定したデータを親ダイアログで取得することができるのでしょうか? C++、MFCともに全然わかっていませんがお願いします。 グローバル変数は、TestDlg.cpp、SetDlg.cppがインクルードしているTest.h内にstatic宣言しています。 static宣言しないとリンクエラー2005になってしまいます。
- ベストアンサー
- C・C++・C#
- コンパイルエラー'CObject::operator =' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。
現在ダイアログA,B,Cがあります。 Aにはボタン2つ([C]呼び込みボタンと[格納]ボタン)、タブがあり、 Bにはエディットボックス(IDC_EDIT1)とスピンボタン(IDC_SPIN1)が Cにもエディットボックス(IDC_EDIT2)とスピンボタン(IDC_SPIN2)があります。 BもCもスピンボタンを押すたびに数値が増減します。 それで、 Aは呼び出し元 BはAにあるタブ内に表示されるダイアログ CはAのボタン押下で呼び出されるダイアログ です。 Aのヘッダに CBDlg m_bdlg; CCDlg m_cdlg; struct aaa { int b; // Bダイアログのスピンの数値を格納する int c; // Cダイアログの〃 }; と定義しました。 Aの[格納]ボタンを押すと構造体に格納されるようにしたいので void CADlg::OnBnClickedKakuno() { struct aaa astruct; astruct.b = m_bdlg.GetDlgItemInt(IDC_EDIT1); astruct.c = m_cdlg.GetDlgItemInt(IDC_EDIT2); } このようにしてコンパイルをしたところ ------------------------------------------------- 1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1820) : error C2248: 'CObject::operator =' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(559) : 'CObject::operator =' の宣言を確認してください。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : 'CObject' の宣言を確認してください。 1> コンパイラでのこの診断により関数 'CCmdTarget &CCmdTarget::operator =(const CCmdTarget &)' が生成されました。 ------------------------------------------------- のようなエラーが発生しました。 どうすればよいのでしょうか? 解決法の程、ご教授いただければと思います。
- 締切済み
- C・C++・C#
- MFCで変数の追加を選択したらWebページエラー
MFCでダイアログベースのアプリを作成しようと思い、エディットボックスを配置した後、変数の追加を行なおうとしたところ、 「Webページエラー」というダイアログが現れました。 「デバッグしますか?」と訊かれたので「いいえ」を選択すると、変数の追加ダイアログが表示されたのですが、 なぜか変数の種類のエディットボックスが表示されず、変数名を設定し強引に完了ボタンをクリックした後 ビルドしても「○○(変数名)が定義されていない」とエラーになってしまいます。 このような現象になった方はいるでしょうか? これはどのようにすれば解決できるのでしょうか? 環境は、 WindowsXP Home Version2002 SP3 VisualStudio2008 Professional Edition 90日評価版 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- SetDlgItemInt( ) c++
今MFCでダイアログを作成いたしました。 IDC_EDIT1というエディットボックスが1つあります。 そのほかにもいろいろありますが、今回はこのエディットボックス内で SetDlgItemInt( )を使って処理したいのです。 //処理内容 double a; a = 10.5; SetDlgItemInt(IDC_EDIT1, (int)a); 以上のようになっています。 SetDlgItemIntの第2引数がUINTなので そのまま SetDlgItemInt(IDC_EDIT1, a); とすると当然怒られてしまう訳ですが、 SetDlgItemInt(IDC_EDIT1, (int)a); とすると逆にエディットボックス内には [10]としか表示されません。 正しく表示させるにはどうしたらよいのでしょうか。 ご教授の程よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- C++ visualstudio グローバル変数
C++のプログラミングに関する質問です。 visual studio2008を使用しています。 手元に非常に複雑なC++ファイルなどから構成されている1つのprojectがあります。(ヘッダファイルなどもあります) そのため、このprojectをデバッグすると、A.cppファイルをデバッグ→B.cppファイルをデバッグ→A.cppファイルをデバッグ→C.cppファイルをデバッグのように、色々なcppファイルを跨ってデバッグします。 1つのcppファイルには大量の関数があり、cppファイルの先頭や,関数外の部分に例えばA.cppで int test などと宣言すれば、A.cppファイル内ではtestと名付けた変数をすべての関数で使えます。 しかし、あくまでA.cppファイル内だけで使用できるだけで、別のBやC.cpp内で使うことはできません。 このtest変数をB.cppやC.cppファイルでも使えるようにするにはどうすればいいでしょうか? 上で挙げた例でいうなら、A.cppからB.cppファイルに移動する際の関数の引数として渡す方法は考えられますが、実際には、 test変数を使いたいのはかなり後に登場するcppファイルで関数の引数として扱うのは非常に大変です。 (Z.cppでtest変数を使いたい。しかしZ.cppに到達するまでにはA~Y.cppを通り、その間に登場するすべての関数でtestを引数にしなければならない) 関数の引数でtest変数を使えるようにする以外の方法がありましたたら教えていただけると幸いです。 実際にやりたいことは A.cpp内にある関数が実行されたらその数をカウントし(A.cppのこの関数は何度も呼び出される関数) //count ++ このcount++の値によってZファイルのある関数での動作を変えたいと思っています。 if(count<100){ printf("aaa"); } しかし、現状ではZ.cppファイル内ではcountが定義されていないので上のようなif文を書くとエラーになってしまいます。
- ベストアンサー
- C・C++・C#
- クラス間の変数について
よろしくお願いします。 VC++のウィザードが自動生成するChildFrm.cpp内のクラスAとMainFrm.cpp内のクラスBの間で共通の変数int xxxを使いたいのですが、どこに宣言すれば良いのでしょうか? それともクラス間では、そのようなことは出来ないのでしょうか? ご存知の方教えてください。
- ベストアンサー
- C・C++・C#
- エディットボックスの改行
MFC ダイアログベースでプログラミングしています。 エディットボックスに改行が入らないのですが何故ですか? 以下のソースで実行すると、「1 2」と表示されます。 m_Display = "1 \x0d\x0a 2"; UpdateData(FALSE); UpdateWindow(); また、 int a; の値をエディットボックスに表示させるにはどうしたらよいですか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- MFC Timerについて
MFCのTimerの利用方法をいろいろ調べたのですが。 理解できずに困っています。 MFCのダイアログベースで作成し、ボタンを押したら Timer(1秒ごと)でエディットボックスに表示させるというものです。 ・ベースのウィンドウにボタンとエディットボックスを作成しました。 ・次に ボタンをダブルクリックし以下のように書きました。 void CtestDlg::OnBnClickedButton() { int x=0; char buf[10000]; x++; sprintf(buf,"%d",x); (labelの変数名)_edit.SetWindowText(buf); } ・SetTimer(1, 1000, NULL);を用いて ボタンがクリックされたら1秒ごとにxの値をエディットボックスに表示させるようにしたいのですが。 OnTimer(UINT nIDEvent) Close()やKillTimer(1);をもちいらなければならないことはわかったのですが。 作業手順がわかりません。 詳しい 作業手順をおしえてください。 プログラム完成まで 教えていただけるととてもうれしいです。 プログラマーの方よろしくお願いします。
- ベストアンサー
- C・C++・C#
お礼
解決しました! ありがとうございます。