VC++を初めて1ヶ月のnorthと申します。
現在MFCのダイアログベースを使用して、あらかじめ用意されたスケルトンプログラムに新規で
ファイルを挿入させ、そこに自分で作成した関数を書きたいと思っています。試しに、ボタンが押
されたらエディットボックスに数字が出力されるようなプログラムをつくってみました。
使用環境・OS:windows98se・ソフト:VC++6.0
MFC/ダイアログベース
プロジェクト名→textout1
ファイル→新規作成C++ソースファイル「keisan.cpp」
エディットボックス×1
ボタン×1:classwizardで関数の追加→OK。ID:IDC_EDIT1
BOOL keisanda(CString ss);
void CTextout1Dlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CString ss,takea;
ss=123;
takea=keisanda(ss);
}
////////////////////////////////////////
以下新規追加作成した関数.ファイル名:keisan.cpp
///////////////////////////////////////
#include stdafx.h
#include textout1.h
#include textout1Dlg.h
BOOL keisanda(CString ss)
{
CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1);
CString s1;
s1=ss+ss;
myED1->SetWindowText(s1);
return TRUE;
}
\textout1\keisan.cpp(8) : error C2660: 'GetDlgItem' : 関数が不正な 1 個の実引数を
ともなって呼び出されました。cl.exe の実行エラー
となってしまいます。このエラーは何かのヘッダファイルをインクルードしてなかったり、もしく
は、ダイアログに文字を出力させる場合はスケルトンで作成されたファイルの中でのみで書かなけ
ればいけないといったようなことなのでしょうか?
勉強不足な為質問の仕方自体おかしいかもしれませんが、どうぞご教授よろしくお願いいたしま
す。m(__)m
関数keisanda()は、どのクラスにも属さない関数として定義しているため、
その中で使用されるGetDlgItem()は、CWnd::GetDlgItem()ではなく
::GetDlgItem()(WindowsAPI)として解釈されています。
MSDNで調べればわかるとおり、両者は同じ名前でも別物で、引数の数も異なります。
kensakuda()は、CTextout1Dlgのメンバ関数として定義してしまえばよいのでは?
sugarさんどうもありがとうございました!!
言われたとおりにkeisanda()関数をCTextout1Dlgのメンバ関数として定義したらエラーがなく
なり、文字の出力もできました。3日もこのエラーで悩んでいたので、文字がエディットボック
スに出力されたときは感動ものでした。本当に本当にありがとうございました。m(__)m