1

我的问题是简单的编辑框。它是这样定义的:

hEditIn=CreateWindowEx(WS_EX_CLIENTEDGE,
            L"EDIT",
            L"",
            WS_CHILD|WS_VISIBLE|ES_MULTILINE|
            ES_AUTOVSCROLL|ES_AUTOHSCROLL,
            50,
            120,
            400,
            200,
            hWnd,
            (HMENU)IDC_EDIT_IN,
            GetModuleHandle(NULL),
            NULL);

之后,当我像这样调用 SendMessage 时:

SendMessage(hEditIn,
                            WM_SETTEXT,
                            NULL,
                            (LPARAM)L"Connected\r\n");

SendMessage(hEditIn,
                            WM_SETTEXT,
                            NULL,
                            (LPARAM)L"TESTSTR");

我只收到最后一条消息而不是第一条消息和新行中的第二条消息。

这也是有问题的,因为如果 serv 检索 WM_ACCEPT 消息,我希望每次都在新行中显示“已连接”。

4

1 回答 1

3

WM_SETTEXT用新文本替换 Edit 控件的全部内容。要将新文本附加到现有文本上,请使用EM_SETSEL将插入符号移动到现有文本的末尾,然后使用 EM_REPLACESEL将新文本插入到当前插入符号位置。

void appendTextToEdit(HWND hEdit, LPCWSTR newText)
{
    int TextLen = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);
    SendMessage(hEdit, EM_SETSEL, (WPARAM)TextLen, (LPARAM)TextLen);
    SendMessage(hEdit, EM_REPLACESEL, FALSE, (LPARAM)newText);
}

appendTextToEdit(hEditIn, L"Connected\r\n");
appendTextToEdit(hEditIn, L"TESTSTR");
于 2014-05-08T18:51:21.570 回答