こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VC++について

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);
}
で表示することができるのですが、連続的に表示する方法が思いつきません。
この文字セットを何らかのイベント(時間切れ、入力完了)後、次のセットに移行させ表示するための方法を教えてください。

投稿日時 - 2008-08-06 11:41:27

QNo.4231736

すぐに回答ほしいです

質問者が選んだベストアンサー

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

・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にする

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

投稿日時 - 2008-08-06 12:55:53

お礼

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

投稿日時 - 2008-08-13 10:31:10

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問