4

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

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

输出: 输出

4

2 回答 2

9

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

如果您想同时显示两行,只需在一次调用中将它们连接在一起SetWindowText()

SetWindowText(hWndEdit, TEXT("\r\nFirst string\r\n\r\nSecond string"));

另一方面,如果你想在不同的时间插入它们,你必须使用EM_SETSEL消息将编辑插入符号放在窗口的末尾,然后使用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);
}

.

AppendText(hWndEdit, TEXT("\r\nFirst string\r\n"));
AppendText(hWndEdit, TEXT("\r\nSecond string"));
于 2013-03-16T08:10:05.207 回答
2
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\r\nSecond string"));

或者

        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); 
于 2013-03-16T08:05:59.393 回答