Не удается скопировать пасту с помощью SetClipboardData в MFC? - PullRequest
0 голосов
/ 22 апреля 2010

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

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


}

1 Ответ

2 голосов
/ 22 апреля 2010

Копия:

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