0

Win32 で複数行のテキストを表示するにはどうすればよいですか? このコードは私のGamePaint()関数内にあり、上位 5 つのハイ スコア (構造体の属性に格納されている) を画面に出力したいと考えています。このメソッドを使用して 1 行を正常に出力することができます...どうすれば TCHAR バッファ szText に複数行を格納できますか? これが私がこれまでに試みたことです:

元のコード:

    //draw rect for normal scores
ChangeTextFormat(hDC, hWnd, 1);
TCHAR szText[64];
RECT  rcNormalScores = { 268, 122, 436, 330};
RECT  rcHardScores = { 37, 122, 198, 330};

//stringstream ssTemp;

for(int i = 0; i < 5; i++)
{
    //ssTemp << i;

    //display nth Normal score
    wsprintf(szText, "%d \n", g_scoreTop[i].num);
    DrawText(hDC, szText, -1, &rcNormalScores, DT_LEFT | DT_WORDBREAK);

}

編集:情報をありがとう、しかし、私はまだデータ型間の変換に苦労しています. これが私が得ているエラーです:

'std::basic_string<_Elem,_Traits,_Ax>' から 'std::basic_string<_Elem,_Traits,_Ax>' に変換できません

EDIT2: 助けてくれてありがとう、queen3。以下の作業コードを投稿しました。

作業コード:

ChangeTextFormat(hDC, hWnd, 1);
RECT  rcNormalScores = { 37, 122, 198, 330}; 
RECT  rcHardScores = { 268, 122, 436, 330};

stringstream ssTemp;

for(int i = 0; i < 5; i++)
{
    ssTemp << g_scoreTop[i].num << " \n";
}

string sTemp = ssTemp.str();
LPCSTR LPTemp = (LPCSTR)sTemp.c_str();

DrawText(hDC, LPTemp, -1, &rcNormalScores, DT_LEFT | DT_WORDBREAK);
DrawText(hDC, LPTemp, -1, &rcHardScores, DT_LEFT | DT_WORDBREAK);
4

1 に答える 1

5

のどちらか

  1. すべての行と改行を含む1つの文字列を作成し、単一のDrawTextを実行します
  2. 文字列の高さを追加して、毎回rcNormalScores .topを調整します(このためにDT_CALCRECTフラグを使用できます)

後でDT_LEFTをDT_CENTERに変更することにした場合は、最初のものの方がうまくいく可能性があります。

于 2012-12-13T19:21:40.860 に答える