2010-04-22 118 views
0

我使用下面的代码来复制粘贴..但它并没有复制整个上下文它只是复制几个字母,剩下的全部作为垃圾值..如果我使用char *来获取数据缓冲区并更改项目设置多字节支持...这将work..but然后我失去支持unicode的格式和我使用CF_UNICODETEXT也试过了,它不工作或者.. 请帮我这个无法在MFC中使用SetClipboardData进行复制粘贴?

void CCopyPAsteDlg::OnBnClickedPaste() 
{ 
    // TODO: Add your control notification handler code here 
if (OpenClipboard()) 
{ 
    if (::IsClipboardFormatAvailable(CF_TEXT) 
    || ::IsClipboardFormatAvailable(CF_OEMTEXT)) 
    { 
    HANDLE hClipboardData = GetClipboardData(CF_TEXT); 
    LPCTSTR pchData = new TCHAR[256]; 
    pchData = (LPCTSTR)GlobalLock(hClipboardData); 

    CString strFromClipboard = pchData; 
    m_SetText.SetWindowText(strFromClipboard); 
    GlobalUnlock(hClipboardData); 
    } 
    else 
    { 
    //AfxMessageBox(L"There is no text (ANSI) data on the Clipboard."); 
    } 
    CloseClipboard(); 
} 



} 

void CCopyPAsteDlg::OnBnClickedCopy() 
{ 
    // TODO: Add your control notification handler code here 
    UpdateData(); 
    CString strData; 
    m_GetText.GetWindowText(strData); 

    if (OpenClipboard()) 
     { 
      EmptyClipboard(); 
      HGLOBAL hClipboardData; 
      hClipboardData = GlobalAlloc(GMEM_DDESHARE, 
             strData.GetLength()+1); 

      LPCTSTR pchData = new TCHAR[256]; 
      pchData = (LPCTSTR)GlobalLock(hClipboardData); 


      wcscpy((wchar_t*)pchData,strData); 
      GlobalUnlock(hClipboardData); 
      SetClipboardData(CF_TEXT,hClipboardData); 

      CloseClipboard(); 
     } 


} 

回答

2

复制:

HGLOBAL hClipboardData = GlobalAlloc(GMEM_DDESHARE, 
             (strData.GetLength()+1)*sizeof(TCHAR)); 
LPCTSTR pchData = (LPCTSTR)GlobalLock(hClipboardData); 
... 
SetClipboardData(CF_UNICODETEXT,hClipboardData); 

粘贴:

HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT); 
LPCTSTR pchData = (LPCTSTR)GlobalLock(hClipboardData); 
+0

我相信它自'CF_UNICODETEXT'应该是'sizeof(WCHAR)'。 – jww 2012-09-16 12:57:26