您正在通过
char*
到
EM_REPLACESEL
。只有当RichEdit控件通过
CreateWindow(Ex)A(RICHEDIT_CLASSA)
。如果使用Unicode HWND,请通过
CreateWindow(Ex)W(RICHEDIT_CLASSW)
,你需要通过
wchar_t*
而是:
void edit_append (const wchar_t *text)
{
CHARRANGE range = {-1, -1};
SendMessage(win_log, EM_EXSETSEL, 0, (LPARAM)&range);
SendMessage(win_log, EM_REPLACESEL, FALSE, (LPARAM)text);
}
void edit_clear (void)
{
CHARRANGE range = {0, -1};
SendMessage(win_log, EM_EXSETSEL, 0, (LPARAM)&range);
SendMessage(win_log, EM_REPLACESEL, FALSE, (LPARAM)L"");
}
如果无法更改的数据类型
text
无论出于什么原因,你都必须使用
MultiByteToWideChar()
(或等效)将数据转换为UTF-16,然后将其提供给
SendMessage()
:
void edit_append (const char *text)
{
int len = strlen(text);
int wlen = MultiByteToWideChar(CP_ACP, 0, text, len, NULL, 0);
wchar_t *wtext = new wchar_t[wlen+1];
MultiByteToWideChar(CP_ACP, 0, text, len, wtext, wlen);
wtext[wlen] = 0;
CHARRANGE range = {-1, -1};
SendMessage(win_log, EM_EXSETSEL, 0, (LPARAM)&range);
SendMessage(win_log, EM_REPLACESEL, FALSE, (LPARAM)wtext);
delete[] wtext;
}