views:

84

answers:

1

I'am using the below code to copy paste..but it doesnt copy the whole context it just copies couple of letters and leave the rest of all as junk value..if I use char* to get the data buffer and change the project settings to Multi byte support...it will work..but then i loose to support the unicode formats and I also tried using CF_UNICODETEXT,it is not working either.. Please help me with this

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  A: 

Copy:

HGBLOBAL 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);
Kyle Alons