2016-06-11 52 views
2

我一直對如何把一個字符串東張西望,UTF-8文本到剪貼板ç

const char* output = "ヽ(⌐■_■)ノ♪♬"; 

到剪貼板。

SetClipboardData(CF_UNICODETEXT, hMem); 

我已經試過的MultiByteToWideChar,但我已經得到了唯一的噪音,也相互衝突的要求,你不能保存UTF-16LE到剪貼板(wchar_t的)。老實說,我只是困惑。方向或代碼樣本會很好。

+0

什麼操作系統? – Adrian

+0

@Adrian:'MultiByteToWideChar'是一個Windows AP,所以Windows。 –

+0

如果您決定使用它,這在SDL中非常容易 –

回答

2

Windows使用UTF-16LE。該字符串應該使用前綴L創建。要使用UTF8,您可以使用u8前綴聲明該字符串。例如:

const char* text = u8"ヽ(⌐■_■)ノ♪♬E"; 

然後,你必須使用MultiByteToWideChar到UTF8轉換爲UTF-16和WinAPI的使用。請注意,要使用u8,您需要較新的編譯器,如VS2015。

首先使用UTF16比較容易。例如:

const wchar_t* text = L"ヽ(⌐■_■)ノ♪♬E"; 
int len = wcslen(text); 

HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (len + 1) * sizeof(wchar_t)); 
wchar_t* buffer = (wchar_t*)GlobalLock(hMem); 
wcscpy_s(buffer, len + 1, text); 
GlobalUnlock(hMem); 

OpenClipboard(NULL); 
EmptyClipboard(); 
SetClipboardData(CF_UNICODETEXT, hMem); 
CloseClipboard();