dポイントプレゼントキャンペーン実施中!

MFC初心者なのですが、MFCで簡単なタイピングゲームを作成しているのですが、肝心の文字列を処理方法を教えていただけたらと思います。
流れとしては、ファイルから文字列を読込み、
読込んだ文字のローマ字部分と同じ文字を制限時間以内に入力するというゲームです。
制限時間を越えてしまった場合は強制的にゲームを終了します。

void CProgramDoc::OnFileRead(CDC *pDC)
というファイルから文字を読込むクラスを作成しました。
ファイルから2行(一行目、漢字、二行目、ローマ字)を1セットとし25セット(全50行)読み込み、全てbufferに一度、格納します。
bufferの型はCStringです。
格納する際は、
strList.AddTail(buffer);
で格納しました。
初めのセットのみを表示する際は、
pos = strList.GetHeadPosition();//先頭部分の要素の位置を返す
m_sStr0 = strList.GetNext(pos);//posの位置を次へ移動させる
m_sStr1 = strList.GetNext(pos);
で、m_sStr0、m_sStr1に格納し、

void CProgramView::Moji(CDC *pDC)
{
CProgramDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(180,530,pDoc->m_sStr0);
pDC->TextOut(180,560,pDoc->m_sStr1);
}
で表示することができるのですが、連続的に表示する方法が思いつきません。
この文字セットを何らかのイベント(時間切れ、入力完了)後、次のセットに移行させ表示するための方法を教えてください。

A 回答 (1件)

色々方法はあると思いますが、私なら・・・



・strList(CStringListですよね?)をCProgramDocのメンバ変数にする。
 posもメンバ変数にする。
・CProgramDocに、次の1セットを取得するような関数 (例えばGetNextSet()とか)をpublicで追加する。
こんな感じで。
 CProgramDoc::GetNextSet()
 {
   if (! m_pos)
     m_pos = m_strList.GetHeadPosition();
   if (m_pos) {
     m_sStr0 = m_strList.GetNext(m_pos);
     m_sStr1 = m_strList.GetNext(m_pos);
   }
 }

・次のセットを移行したいタイミングで、TextOutを呼ぶ前に追加した関数を呼ぶ。
・移行するタイミングは、WM_TIMERやエディットボックスのEN_CHANGEで判断する。
・全行読み込む時に、m_posをNULLにする

また、このようなアプリケーションならばダイアログベースの方が作りやすいと思います。
    • good
    • 0
この回答へのお礼

ご解答ありがとうございます。
お礼が遅くなり申し訳ございませんでした。
今回のご解答ですが、大変分かりやすかったです。
本当にありがとうございます。

お礼日時:2008/08/13 10:31

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