電子書籍の厳選無料作品が豊富!

エディットボックスについて色々と質問をさせてもらっている、C++の初心者です。今、悩んでいるのがm_text1にデータ("1","2","3")を入力し、m_text2にm_text1で入力したデータ("1"→"青","2"→"黄","3"→"赤")を文字を表示させます。ここまでは出来たのですが、実行時に入力画面が立上がりデフォルトでm_text1が"1"とし、この時m_text2は"青"が出力、そこでm_text1の値を"2"・"3"に替えた瞬間(例えばm_text1'やm_text1''をマウスクリック時)にm_text2(m_text2'やm_text2'')が"赤"・"黄"にしたいのですが。どうぞよろしくお願いいたします。

A 回答 (3件)

>以前にご教示頂いた下記のコーディングを前提に文字を表示させる件です。



全然前提になってないんですが。

>CClientDC myDC(this);
>CmyDialog myDLG;

これはどこから出てきたのですか?
この2行の意味は理解されてますか?

YZ80さんの処理はどこのハンドラに記述されているのですか?
ウィンドウを持つアプリケーションはイベントドリブンです。
いきなり処理だけ抜き出されてもいつどこで行われる
処理なのかがわかりません。

私のサンプルは、
void CMyDialog::OnButton1Click()
というように、どこのイベントで動く処理かというのが
はっきりわかりますよね?

前提にして処理を書かれたというのでしたら、UpdateData()は
どこに行ってしまったんですか?

>また、通信に関してはプログラムを実行時にボード内の
>CPU内をデバッグし、テーブルのアドレスのデータを
>書き替えて"1"のデータなら"青"・"2"なら"黄"という
>イメージです。そこで、プログラムが立上った時に
>テーブルのデータの状態を見て、現状が"1"の時に"青"・
>"2"なら"黄"・"3"なら"赤"とエディットボックスに
>表示させるというイメージです。

そのボードのドライバがあると思うので、ドライバの
使い方を調べてください。
ドライバまでYZ80さんが書かれるというのであれば、
ボードの仕様書とにらめっこしてがんばってください。

大前提なのですが、このアプリケーションは、AppWizardで
・SDI
・MDI
・ダイアログベース
のどれを選択して作られているのでしょう?


>読み出し専用にしたいのすが、m_text3.SetReadOnly(TRUE);

C++は理解されていますか?
クラスとメソッドの関係がわかっていれば、そんな質問の内容には
ならないはずですが。

SetReadOnlyはCEditのメンバ関数です。m_text3がCStringなら
呼べるわけがありません。


>m_text3(テーブルのデータをオペレータが編集する。
>入力値は"1"or"2"or"3"とします。)、

おまけですけど、普通これならラジオボタンにしません?
オペレーションのミスを防ぐという点でもエディットボックスを
使うメリットが無いと思うのですが。

この回答への補足

taka tetsuさんどうもありがとうございました。ようやく動作するようになってまいりました。CEditのメンバ関数を理解してませんでした。本当にありがとうございます。今後ともよろしくお願いします。

補足日時:2004/01/22 22:46
    • good
    • 0
この回答へのお礼

いろいろとありがとうございました。Cもやった事もありませんでしたので、いきなりC++で教科書開いて2週間だったもので、ご教示頂く事も正直、理解できていません。あまりプログラミングは向いていない方なので、本当に自信はありませんが、頼る方もいないのでこちらでお世話になろうと思いましたが、今後は少し自分で勉強をしてもう少し、質問らしい質問ができるようになったら、またお世話になります。ありがとうございました。

お礼日時:2004/01/22 13:20

>ファイルのオープンの仕方と



http://www.google.co.jp/search?num=100&hl=ja&ie= …

ファイルの読み書きは基本ですので自分で探してみましょうね。


>下記のコーディングを添削して頂けませんでしょうか?

>CClientDC myDC(this);
>CmyDialog myDLG;

何をしたいのでしょうか?
どのように文字を表示させたいのでしょうか?
TextOut()等で自分でクライアント領域に描画したいのですか?
エディットボックス等のコントロールに出力したいのですか?

説明不足で添削できません。

あと、次回のファイルオープンというのはいつを指すのですか?
アプリが動いている間に次回のファイルオープンが行われるのですか?次のアプリの起動時のことですか?
正しく説明をお願いします。

>また、最終的は既存ファイルはイーサ経由でボードにある固定アドレスの値を編集したいので、
>合わせて通信方法についてもご教示頂ければ幸甚です。

固定アドレス?etherということはIPアドレスって意味ですか?ボードにあるって何を意味しているのですか?正しく説明してください。
それがわからないの通信方法など説明できません。

この回答への補足

説明不足で申し訳ありません。
以前にご教示頂いた下記のコーディングを前提に文字を表示させる件です。
void CMyDialog::OnButton1Click()
{

UpdateData(TRUE);

if( m_strEdit1 == _T("ON") ) {
m_strEdit2 = _T("1");
}
else if( m_strEdit1 == _T("OFF") ) {
m_strEdit2 = _T("2");
}

UpdateData(FALSE);

}

みたいにすれば、平気かな?

"ON"を"青"・"OFF"を"赤"というような感じです。
また、通信に関してはプログラムを実行時にボード内のCPU内をデバッグし、テーブルのアドレスのデータを書き替えて"1"のデータなら"青"・"2"なら"黄"というイメージです。そこで、プログラムが立上った時にテーブルのデータの状態を見て、現状が"1"の時に"青"・"2"なら"黄"・"3"なら"赤"とエディットボックスに表示させるというイメージです。エディットボックスは現在、m_text1(テーブルの状態を表示"1"。読み出し専用)、m_text2(m_text1の"1"を判定し、"青"を表示させる。)、m_text3(テーブルのデータをオペレータが編集する。入力値は"1"or"2"or"3"とします。)、m_text4(Button1を押下後、m_text3でオペレータが編集したデータを"1"→"青"と表示させる。)、Button1(オペレータがm_text3でデータを編集し、確定する時に押下する。この時にm_text3は読み出し専用にしたいのすが、m_text3.SetReadOnly(TRUE);と書いて見ましたが、コンパイルエラーになってしまいます。)、あとはキャンセルボタンと編集したデータをボードに送信するOKボタンで構成を考えています。説明が下手で申し訳ありません。よろしくお願い致します。

補足日時:2004/01/22 09:15
    • good
    • 0

>(例えばm_text1'やm_text1''をマウスクリック時)



って、いくら例でもマウスクリックじゃ文字は変わりませんよね。

MFCでよろしいですか?
エディットボックスのOnChangeのイベントハンドラを
作成します。(メッセージはEN_CHANGEです)
ダイアログの作成時、エディットボックスをダブルクリックしてハンドラを作成してください。

その中でm_text2の値を変更してUpdateDataを呼び出してあげてください。

この回答への補足

ご教示ありがとうございます。
考え方を改めたいと思います。
既存フォルダ内のファイル(c:\tmp\data.txt)を開いて、"1"だったら、"青"をm_text2に出力し、次回ファイルをオープンした時には、"2"もしくは"3"の時に"黄"・"赤"をm_text2に出力するようにしたいと思います。ファイルのオープンの仕方と下記のコーディングを添削して頂けませんでしょうか?

CClientDC myDC(this);
CmyDialog myDLG;

//不明なところc:\tmp\data.txtの中に"1"があれば"青"をm_text2に出力

if( myDLG.m_text1 == _T("1") ) {
myDLG.m_text2 = _T("青");
}
else if( myDLG.m_text1 == _T("2") ) {
myDLG.m_text2 = _T("黄");
}
else if( myDLG.m_text1 == _T("3") ) {
myDLG.m_text2 = _T("赤");
}

また、最終的は既存ファイルはイーサ経由でボードにある固定アドレスの値を編集したいので、合わせて通信方法についてもご教示頂ければ幸甚です。
よろしくお願い致します。

補足日時:2004/01/21 18:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!