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);
}
で表示することができるのですが、連続的に表示する方法が思いつきません。
この文字セットを何らかのイベント(時間切れ、入力完了)後、次のセットに移行させ表示するための方法を教えてください。
No.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にする
また、このようなアプリケーションならばダイアログベースの方が作りやすいと思います。
ご解答ありがとうございます。
お礼が遅くなり申し訳ございませんでした。
今回のご解答ですが、大変分かりやすかったです。
本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Chrome(クローム) googleアカウントのアイコンをローマ字または漢字で表示させたい 2 2023/05/06 22:25
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UNICODE文字が含まれているかの...
-
文字列の後ろから必要分だけ削...
-
ダブルクォーテーションを文字...
-
C言語でギリシャ文字は使えます...
-
Accessのクエリで、replace関数...
-
VBからACCESSのレポートを印...
-
awk で右端の文字を1文字削除...
-
VB2008 文字列に等間隔にスペ...
-
ダブルクォーテーションについて
-
文字列にアルファベットが何文...
-
ボイヤ・ムーア法のアルゴリズ...
-
特定のセルが空白だったら、そ...
-
VB.NETで DataRow()を利用して...
-
VBAでセルをクリックする回...
-
i=cells(Rows.Count, 1)とi=cel...
-
ListView 項目の選択/選択解除...
-
Excelのプルダウンで2列分の情...
-
Excelで指定した日付から過去の...
-
TODAY()で設定したセルの日付...
-
ExcelVBAを使って、値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
文字列の後ろから必要分だけ削...
-
UNICODE文字が含まれているかの...
-
ダブルクォーテーションを文字...
-
エクセル関数で記号から記号の...
-
文字列にアルファベットが何文...
-
C言語でギリシャ文字は使えます...
-
GetDlgItemTextについて
-
strcmp( )関数について教えて...
-
VS C++6.0のCString にて先頭1...
-
お願いです!!
-
URLで使える文字・使えない...
-
文字数と単語数を数えるプログラム
-
awk で右端の文字を1文字削除...
-
右から何文字目にあるか文字位...
-
CSVの禁則文字
-
VBScriptでXcopyしたいのですが
-
64進数
-
環境依存文字?をEnumで定義したい
-
VB2008 文字列に等間隔にスペ...
おすすめ情報