Win32:在缓冲区中存储多行文本

Win32: Storing Multi-Line Text in a Buffer

本文关键字:文本 存储 缓冲区 Win32      更新时间:2023-10-16

如何在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<_Elem,_Traits,_Ax>"转换为"std::basic_string<_Elem,_Traits,_Ax>"

编辑2:感谢您的帮助,女王3。我在下面发布了工作代码:

工作规范:

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

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

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