親から子へ値渡し – プログラミング – Home

通知
すべてクリア

[解決済] 親から子へ値渡し

固定ページ 1 / 3

シャー
 シャー
(@シャー)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

親で取得した値を子ダイアログのエディットボックスに表示する方法がうまくいきませ
ん。

記載するソースはコンパイルも通ってないですが、載せておきます。
ここを変えたらうまくいくとかあったら教えてください。

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' の左側はクラス、構造体、共用体でなければなり
ません
というエラーがでてしまいます。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

ヘルプでC2228の説明を見ましょう。
CChildDlg::m_startは実体ですか、ポインタですか?。


返信引用
シャー
 シャー
(@シャー)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

仲澤@失業者さん

>>CChildDlg::m_startは実体ですか、ポインタですか?。

CChildDlgは子ダイアログのclass
m_startはCChildDlg classのpublicでCStaticで定義しています。

void CChildDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_EDIT1, m_start);
}
としています。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> CChildDlg::m_start.SetWindowText(cWk0);

多分、クラスとインスタンスの違いを理解できていないんだと思います。
MFCでプログラムを作るなら、最低限理解しておく必要があります。
http://www7b.biglobe.ne.jp/robe/cpphtml/index.html
(このサイトではインスタンスではなく、オブジェクトという言葉が使われています)

どう直したらよいかは、CParentDlg::ReadParam()が呼ばれたときに
子ダイアログがどんな状態か、親ダイアログが子ダイアログをどのように
管理しているか等によります。説明できますか?

もし説明できない場合、どんなタイミングで何をしたいのか、
いつReadParam()が呼ばれるのか、そのとき子ダイアログは
表示されているのか、等を説明してください。


返信引用
シャー
 シャー
(@シャー)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

>>もし説明できない場合、どんなタイミングで何をしたいのか、
>>いつReadParam()が呼ばれるのか、そのとき子ダイアログは
>>表示されているのか、等を説明してください。

子ダイアログはモーダルダイアログです。
動画ファイルを読み込んで表示部に表示させる際に、その動画ファイルの撮影条件が保
存されているテキストファイルを読み込んでその撮影条件の一部を子ダイアログのエデ
ィットボックスに表示させたいと考えています。
ReadParam()が呼び出されるタイミングは動画ファイル読み込みボタンが押されると
呼ぶようになっています。
その際には子ダイアログは表示されていません。子ダイアログはまた別のボタンを押し
たときに表示されます。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

ReadParam()では、テキストファイルから取得した値をメンバ変数に渡せばよい。
別のボタンを押したときに、ダイアログのインスタンスを作ってから、
その値をエディットボックスにセットすればよい。


返信引用
シャー
 シャー
(@シャー)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

たいちうさん

具体的な方法を提示していただけると助かります。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

抽象的に書いたつもりはないのですが。まず1行目。

> ReadParam()では、テキストファイルから取得した値をメンバ変数に渡せばよい。

どこがわからないのですか?


返信引用
シャー
 シャー
(@シャー)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

たいちうさん

テキストファイルから取得した値をメンバ変数に渡す方法が分かりません


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

私が昨日張ったリンクは見てくれていますか?
具体的な質問をできないということは、
C++の理解が覚束ないような気がするのですが。

例えば、メンバ変数って分かります?
追加できますか?
私の文脈で、どのクラスに追加するべきか分かりますか?
その型は?


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
 

>>例えば、メンバ変数って分かります?
>>追加できますか?
>>私の文脈で、どのクラスに追加するべきか分かりますか?
>>その型は?

メンバ変数はわかります。

何を追加するべきなのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

↑アナタどなた?


返信引用
シャー
 シャー
(@シャー)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

すいません間違えました。

>>例えば、メンバ変数って分かります?
>>追加できますか?
>>私の文脈で、どのクラスに追加するべきか分かりますか?
>>その型は?

メンバ変数はわかります。

何を追加するべきなのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 親で取得した値を子ダイアログのエディットボックスに表示する方法
が知りたいんでしょ?

子ダイアログ・クラスに値の受け取り窓口を作っておけばいい。
そうすれば子ダイアログは受け取った値をエディットボックスに表示できる。

ってことなんですけど。


返信引用
シャー
 シャー
(@シャー)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

επιστημηさん

ありがとうございます。

//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に渡せてないのです。
受け取り窓口を作ったつもりなのですが、これでは窓口になってないですか?


返信引用
固定ページ 1 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました