Winapi 使用SetWindowText()函数添加新行

Winapi 使用SetWindowText()函数添加新行,winapi,editbox,Winapi,Editbox,我已经创建了一个编辑窗口。 我希望一个字符串显示在一行中,另一个字符串显示在另一行中,但我正在执行的代码只显示第二个字符串。下面是我的代码片段: hWndEdit = CreateWindow("EDIT", // We are creating an Edit control NULL, // Leave the control empty WS_CHILD |

我已经创建了一个编辑窗口。 我希望一个字符串显示在一行中,另一个字符串显示在另一行中,但我正在执行的代码只显示第二个字符串。下面是我的代码片段:

hWndEdit = CreateWindow("EDIT", // We are creating an Edit control
                                NULL,   // Leave the control empty
                                WS_CHILD | WS_VISIBLE | WS_HSCROLL |
                                WS_VSCROLL | ES_LEFT | ES_MULTILINE |
                                ES_AUTOHSCROLL | ES_AUTOVSCROLL,
                                10, 10,1000, 1000,
                                hWnd,
                                0,
                                hInst,NULL);
SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n"));

SetWindowText(hWndEdit, TEXT("\r\nSecond string"));
输出:


您只看到最后一行,因为
SetWindowText()
一次性替换了窗口的全部内容

如果要同时显示这两行,只需通过调用
SetWindowText()
,将它们连接在一起即可:

另一方面,如果要在不同的时间插入它们,则必须使用
EM_setel
消息将编辑插入符号放置在窗口的末尾,然后使用
EM_REPLACESEL
消息在当前插入符号位置插入文本,如本文所述:

例如:

void AppendText(HWND hEditWnd, LPCTSTR Text)
{
    int idx = GetWindowTextLength(hEditWnd);
    SendMessage(hEditWnd, EM_SETSEL, (WPARAM)idx, (LPARAM)idx);
    SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM)Text);
}


我建议彻底检查,尤其是从根本上描述函数如何符合其名称的部分:SetWindowText()。它不是AppendWindowText()。由于这是一个编辑控件,我猜他们可能会访问,他们能为您做的事情可能是一本有趣的书。@WhozCraig似乎我一直在读您的精彩评论。请开始把它们作为答案发布,这样我就可以开始投票了@科迪格雷,谢谢你,科迪。顺便说一句,你的头像太棒了。我做这件事才9个月,但有时我忘了把答案贴出来。或者我觉得这并不是一个可靠的答案。有时RTFM本身是合适的,但我只是发表评论。习惯,我猜。+1,特别是对于控制信息的建设性使用(我试着在开场白中不那么害羞地给出提示)。+1,谢谢你的帮助,回答得很好。真的帮了我:)谢谢你的帮助:)这两个答案都是我用的:)
        SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n"));

        char* buf = malloc(100);
        memset(buf, '\0', 100);

        GetWindowText(hWndEdit, (LPTSTR)buf, 100);
        strcat(buf, "\r\nSecond string");
        SetWindowText(hWndEdit, (LPTSTR)buf); 
SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n\r\nSecond string"));
void AppendText(HWND hEditWnd, LPCTSTR Text)
{
    int idx = GetWindowTextLength(hEditWnd);
    SendMessage(hEditWnd, EM_SETSEL, (WPARAM)idx, (LPARAM)idx);
    SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM)Text);
}
AppendText(hWndEdit, TEXT("\r\nFirst string\r\n"));
AppendText(hWndEdit, TEXT("\r\nSecond string"));