我試圖做一個快速方法來設置MFC中的剪貼板文本,但這不起作用。將文本複製到MFC中的剪貼板中
void CopyTextToClipBoard(CString strText)
{
if (OpenClipboard(GetFrame()->GetSafeHwnd()))
{
EmptyClipboard() ;
SetClipboardData (CF_TEXT, strText.GetBuffer()) ;
CloseClipboard() ;
}
}
我在'setClipboardData'上得到'Windows斷點'錯誤。任何人都知道我可能做錯了什麼?
編輯:感謝您的評論。 Modfied。現在它失敗:memcopy函數。
void CopyTextToClipBoard(CString strText)
{
if (OpenClipboard(GetFrame()->GetSafeHwnd()))
{
HGLOBAL hglbCopy;
LPTSTR lptstrCopy;
hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (strText.GetLength() + 1) * sizeof(TCHAR));
if (hglbCopy == NULL)
{
CloseClipboard();
return ;
}
memcpy(GlobalLock(hglbCopy), &strText, strText.GetLength() + 1 * sizeof(TCHAR));
GlobalUnlock(hglbCopy);
SetClipboardData(CF_TEXT, hglbCopy);
EmptyClipboard() ;
SetClipboardData (CF_TEXT, strText.GetBuffer()) ;
CloseClipboard() ;
}
}
編輯:使用這個舊的msdn示例。
const char* output = "Test";
const size_t len = strlen(output) + 1;
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), output, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
你從哪裏得到的信息是,第二個參數[SetClipboardData(https://msdn.microsoft.com/en-us/library/ windows/desktop/ms649051%28v = vs.85%29.aspx)是一個字符串? – PaulMcKenzie
而不是使用*&strText *,您應該使用* strText.GetBuffer()*。並且不要忘記在memcpy之後的字符串末尾添加空終止符。 –