MFCスケルトンに新規ファイルを追加する

[戻る]
north 2002/02/04(月) 18:48:34
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

sugar 2002/02/04(月) 19:14:00
関数keisanda()は、どのクラスにも属さない関数として定義しているため、
その中で使用されるGetDlgItem()は、CWnd::GetDlgItem()ではなく
::GetDlgItem()(WindowsAPI)として解釈されています。
MSDNで調べればわかるとおり、両者は同じ名前でも別物で、引数の数も異なります。

kensakuda()は、CTextout1Dlgのメンバ関数として定義してしまえばよいのでは?

north 2002/02/05(火) 09:51:47
[[解決]]
sugarさんどうもありがとうございました!!
言われたとおりにkeisanda()関数をCTextout1Dlgのメンバ関数として定義したらエラーがなく
なり、文字の出力もできました。3日もこのエラーで悩んでいたので、文字がエディットボック
スに出力されたときは感動ものでした。本当に本当にありがとうございました。m(__)m

古いスレッドには追加発言できません。