2010-04-22 4 views
0

Я использую приведенный ниже код для копирования вставки .. но он не копирует весь контекст, он просто копирует несколько букв и оставляет все остальное как значение junk. Если я использую char * для получения буфера данных и изменения настройки проекта в многостраничный поддержку байт ... это будет work..but тогда я потерять, чтобы поддерживать форматы Юникода, и я также попытался с помощью CF_UNICODETEXT, он не работает, либо .. Пожалуйста, помогите мне с этимНе удается скопировать папку с помощью SetClipboardData в MFC?

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); 

Paste:

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

Я считаю, что это должно быть 'sizeof (WCHAR)' с 'CF_UNICODETEXT'. – jww

 Смежные вопросы

  • Нет связанных вопросов^_^