【问题标题】:Not able to copypaste using SetClipboardData in MFC?无法在 MFC 中使用 SetClipboardData 进行复制粘贴?
【发布时间】:2010-04-22 08:16:08
【问题描述】:

我正在使用下面的代码来复制粘贴..但它不会复制整个上下文它只是复制几个字母并将其余部分作为垃圾值..如果我使用 char* 来获取数据缓冲区和将项目设置更改为多字节支持...它会工作..但后来我松动以支持 unicode 格式,我也尝试使用 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();
      }


}

【问题讨论】:

    标签: unicode mfc copy-paste


    【解决方案1】:

    复制:

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

    【讨论】:

    • 我认为应该是sizeof(WCHAR),因为CF_UNICODETEXT
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多