親で取得した値を子ダイアログのエディットボックスに表示する方法がうまくいきませ
ん。
記載するソースはコンパイルも通ってないですが、載せておきます。
ここを変えたらうまくいくとかあったら教えてください。
int CParentDlg::ReadParam(const char *FileName)
{
------------------------------------------------------------------------------
FILE *pd;
if((pd=fopen(FileName,r))==NULL){
return 1;
}
if(Param(pd,Record_Start_Time,&Record_Start_Time)!=NORMAL)return E_PARAM;
if(Param(pd,Record_Image_Time,&Record_Image_Time)!=NORMAL)return E_PARAM;
if(Param(pd,Record_Interval_Time,&Record_Interval_Time)!=NORMAL)return
E_PARAM;
if(Param(pd,Record_Number_of_Time,&Record_Number_of_Time)!=NORMAL)return
E_PARAM;
if(Param(pd,Record_Mode,&Record_Mode)!=NORMAL)return E_PARAM;
fclose(pd);
-------------------------------------------------------------------------------
if(Record_Mode==2){
sprintf(cWk0,%d,Record_Start_Time);
CChildDlg::m_start.SetWindowText(cWk0);
}
return 0;
}
------の間の処理はテキストファイルの値を読み込むというものです。
そして、Record_Modeの値が2だったら子ダイアログのエディットボックスの
Record_Start_Timeの値を表示させたいのです。
このソースでは
: error C2228: '.SetWindowTextA' の左側はクラス、構造体、共用体でなければなり
ません
というエラーがでてしまいます。
ヘルプでC2228の説明を見ましょう。
CChildDlg::m_startは実体ですか、ポインタですか?。
仲澤@失業者さん
>>CChildDlg::m_startは実体ですか、ポインタですか?。
CChildDlgは子ダイアログのclass
m_startはCChildDlg classのpublicでCStaticで定義しています。
void CChildDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_EDIT1, m_start);
}
としています。
> CChildDlg::m_start.SetWindowText(cWk0);
多分、クラスとインスタンスの違いを理解できていないんだと思います。
MFCでプログラムを作るなら、最低限理解しておく必要があります。
http://www7b.biglobe.ne.jp/robe/cpphtml/index.html
(このサイトではインスタンスではなく、オブジェクトという言葉が使われています)
どう直したらよいかは、CParentDlg::ReadParam()が呼ばれたときに
子ダイアログがどんな状態か、親ダイアログが子ダイアログをどのように
管理しているか等によります。説明できますか?
もし説明できない場合、どんなタイミングで何をしたいのか、
いつReadParam()が呼ばれるのか、そのとき子ダイアログは
表示されているのか、等を説明してください。
>>もし説明できない場合、どんなタイミングで何をしたいのか、
>>いつReadParam()が呼ばれるのか、そのとき子ダイアログは
>>表示されているのか、等を説明してください。
子ダイアログはモーダルダイアログです。
動画ファイルを読み込んで表示部に表示させる際に、その動画ファイルの撮影条件が保
存されているテキストファイルを読み込んでその撮影条件の一部を子ダイアログのエデ
ィットボックスに表示させたいと考えています。
ReadParam()が呼び出されるタイミングは動画ファイル読み込みボタンが押されると
呼ぶようになっています。
その際には子ダイアログは表示されていません。子ダイアログはまた別のボタンを押し
たときに表示されます。
ReadParam()では、テキストファイルから取得した値をメンバ変数に渡せばよい。
別のボタンを押したときに、ダイアログのインスタンスを作ってから、
その値をエディットボックスにセットすればよい。
たいちうさん
具体的な方法を提示していただけると助かります。
抽象的に書いたつもりはないのですが。まず1行目。
> ReadParam()では、テキストファイルから取得した値をメンバ変数に渡せばよい。
どこがわからないのですか?
たいちうさん
テキストファイルから取得した値をメンバ変数に渡す方法が分かりません
私が昨日張ったリンクは見てくれていますか?
具体的な質問をできないということは、
C++の理解が覚束ないような気がするのですが。
例えば、メンバ変数って分かります?
追加できますか?
私の文脈で、どのクラスに追加するべきか分かりますか?
その型は?
>>例えば、メンバ変数って分かります?
>>追加できますか?
>>私の文脈で、どのクラスに追加するべきか分かりますか?
>>その型は?
メンバ変数はわかります。
何を追加するべきなのでしょうか?
↑アナタどなた?
すいません間違えました。
>>例えば、メンバ変数って分かります?
>>追加できますか?
>>私の文脈で、どのクラスに追加するべきか分かりますか?
>>その型は?
メンバ変数はわかります。
何を追加するべきなのでしょうか?
> 親で取得した値を子ダイアログのエディットボックスに表示する方法
が知りたいんでしょ?
子ダイアログ・クラスに値の受け取り窓口を作っておけばいい。
そうすれば子ダイアログは受け取った値をエディットボックスに表示できる。
ってことなんですけど。
επιστημηさん
ありがとうございます。
//CChildDlg.cpp
CParentDlg dlg(this);
rst = dlg.GetSt();
sprintf(param,%d,rst);
m_start.SetWindowText(param);
//CChildDlg.h
int rst;
char param[200];
//CParentDlg.cpp
int CParentDlg::ReadParam(const char *FileName)
{
FILE *pd;
if((pd=fopen(FileName,r))==NULL){
return 1;
}
if(Param(pd,Record_Start_Time,&Record_Start_Time)!=NORMAL)return E_PARAM;
fclose(pd);
return 0;
}
//CParentDlg.h
class CParentDlg : public CDialog
{
~省略~
public:
int GetSt() { return Record_Start_Time;}
int GetIm() { return Record_Image_Time;}
int GetIn() { return Record_Interval_Time;}
int GetNo() { return Record_Number_of_Time;}
}
をコーディングしたのですが、値の受け渡しが上手くでませんでした。
CParentDlg内では値取得は出来てるのですが、その値をCChildDlgに渡せてないのです。
受け取り窓口を作ったつもりなのですが、これでは窓口になってないですか?