• ベストアンサー

OKボタンをクリックした時に、エディットボックスを操作したい

こんにちは。 表題の通り、MFCのダイアログベースでワークスペースを作ったときに、はじめから作成されるコードに加えて long fun1(); void CTestDlg::OnOK() {   long ret;   ret = func1(); } long fun1() {   m_ed1.SetWindowText("あいうえお"); } のようにすると、「定義されていない識別子です。」と「左側がクラス、構造体、共用体ではありません」とのメッセージが出るのですが、これはどこをどう直せばいいんですか? ただし、m_ed1はコントロール変数として宣言しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • clsdi99
  • ベストアンサー率63% (31/49)
回答No.3

func1 ()という関数は、普通の関数でなくちゃだめですか?今回のような場合ですと、通常 CTestDlgのメソッドにします。 // メソッドにした場合(当然クラスの宣言部(.h)で宣言します) long CTestDlg::func1 () { m_ed1.SetWindowText("あいうえお"); return ??; } // --------------------------------------- // 普通の関数にする場合 long func1 (CTestDlg *dlg) { dlg->m_ed1.SetWindowText("あいうえお"); return ??; } void CTestDlg::OnOK () { long ret; ret = func1 (this); } とこんな感じになると思います。

hibachi
質問者

補足

このやり方で見事動きました。ありがとうございます。 > func1 ()という関数は、普通の関数でなくちゃだめですか? どちらかと言うとそのほうが望ましいケースでした。

その他の回答 (3)

  • neko3839
  • ベストアンサー率37% (100/269)
回答No.4

・CTestDlgクラスのオブジェクト宣言は、アプリケーションクラス(CTestApp?)の .cpp に無いですか? ・m_ed1 はどこで定義されているのですか?ANo.2の回答を見た限りでは、CTestDlgクラスのメンバではないでしょうか?

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

>・CTestDlgクラスのオブジェクト宣言がどこにも見当たらない事 CTestAppクラス内にありませんか? ダイアログベースだと、ここからDoModal()で呼び出しています。 >・m_ed1は、publicのようですが、外部からアクセスできないのは何故なのか スコープが違います。 func1()から見ることの出来る場所は、関数内とグローバルだけです。 CTestDlg *pDlg; /* ここでpDlgにメインのダイアログを対応させる */ pDlg->m_ed1.SetWindowText("あいうえお"); などとすればアクセスできるでしょう。

hibachi
質問者

補足

回答ありがとうございます。 > CTestAppクラス内にありませんか? ありました。確認できました。 > CTestDlg *pDlg; > pDlg->m_ed1.SetWindowText("あいうえお"); これはできませんでした。CTestDlg *pDlgは、func1内で宣言すると言う事で正しいですか?

  • ataka304
  • ベストアンサー率40% (9/22)
回答No.1

もしかして func1 と fun1 のスペルミス・・ ですか?

hibachi
質問者

お礼

必死で調べて、func1を CTestDlgのメンバ関数にする事で解決できました。ただ、疑問に残るのが  ・CTestDlgクラスのオブジェクト宣言がどこにも見当たらない事  ・m_ed1は、publicのようですが、外部からアクセスできないのは何故なのか 以上がわかりません。どなたか教えていただけませんか。

hibachi
質問者

補足

あとで気がつきました、fun1はfunc1の間違いです。が、これは簡略化して書いたので実際は違う名前です。原因ではありません。 すみません、ここは忘れてください。