如何在Win32中显示多行文本?该代码在我的GamePaint()函数中,并且我想将前5个高分(存储在结构的属性中)写到屏幕上。我可以使用此方法成功输出一行...如何使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 '转换为'std :: basic_string


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);

最佳答案

两者之一


使用所有行和换行符制作一个字符串,并执行单个DrawText
每次通过添加字符串的高度来调整rcNormalScores .top(为此,您可以使用DT_CALCRECT标志)


如果您以后决定将DT_LEFT更改为DT_CENTER,则第一个可能会更好。

关于c++ - Win32:在缓冲区中存储多行文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13866846/

10-14 06:36