【发布时间】:2014-02-09 01:33:23
【问题描述】:
当我使用 char 时,可以以 HTML 格式复制到剪贴板,但如果我使用 wchar_t,它就不起作用了
当我粘贴时它只是空的
这是我的代码请帮助我
或者有没有更好的方式来使用 unicode(不使用 wchar_t)?如果你帮助我
void copyStringEnd(wchar_t *string, wchar_t *buffer)
{
int i = 0;
int string_StartIndex = 0;
while (string[string_StartIndex] != NULL)
{
string_StartIndex++;
}
while (buffer[i] != NULL)
{
string[string_StartIndex + i] = buffer[i];
i++;
}
string[string_StartIndex + i] = '\0';
}
int main()
{
wchar_t *html = L"abc";
wchar_t *buf = (wchar_t*)malloc(400 + wcslen(html));
wcscpy_s(buf, 200,
L"Version:0.9\r\n"
L"StartHTML:00000000\r\n"
L"EndHTML:00000000\r\n"
L"StartFragment:00000000\r\n"
L"EndFragment:00000000\r\n"
L"<html><body>\r\n"
L"<!--StartFragment -->\r\n");
copyStringEnd(buf, html);
copyStringEnd(buf, L"\r\n");
copyStringEnd(buf,
L"<!--EndFragment-->\r\n"
L"</body>\r\n"
L"</html>");
wchar_t *ptr = wcsstr(buf, L"StartHTML");
wsprintfW(ptr + 10, L"%08u", wcsstr(buf, L"<html>") - buf);
*(ptr + 10 + 8) = '\r';
ptr = wcsstr(buf, L"EndHTML");
wsprintfW(ptr + 8, L"%08u", wcslen(buf));
*(ptr + 8 + 8) = '\r';
ptr = wcsstr(buf, L"StartFragment");
wsprintfW(ptr + 14, L"%08u", wcsstr(buf, L"<!--StartFrag") - buf);
*(ptr + 14 + 8) = '\r';
ptr = wcsstr(buf, L"EndFragment");
wsprintfW(ptr + 12, L"%08u", wcsstr(buf, L"<!--EndFrag") - buf);
*(ptr + 12 + 8) = '\r';
if (OpenClipboard(NULL)) {
EmptyClipboard();
HGLOBAL hText = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, wcslen(buf) * sizeof(wchar_t) + 4);
wchar_t *ptrs = (wchar_t *)GlobalLock(hText);
wcscpy_s(ptrs, wcslen(buf) + 2, buf);
GlobalUnlock(hText);
SetClipboardData(RegisterClipboardFormatA("HTML Format"), hText);
CloseClipboard();
GlobalFree(hText);
}
free(buf);
}
【问题讨论】:
-
这在文档msdn.microsoft.com/en-us/library/aa767917(v=vs.85).aspx“CF_HTML 完全是文本格式并且使用转换格式 UTF-8”中有解释。
标签: c++ c unicode clipboard wchar-t