我的问题是使用简单的编辑框。它是这样定义的:
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 retrem WM_ACCEPT消息,我想每次在新行中显示“已连接”。
最佳答案
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");