CString StrTmp = "fly";
我想把StrTmp复制到粘贴板,我找了一些网页资料,粘贴板的处理要预先申请地址段(比较低级的内存操作,似乎会涉及到溢出的情况?),
如果我的CString很大的话,例如有1,2M的文本情况下,求个安全的粘贴板代码例子.....
谢谢!

解决方案 »

  1.   

    你在将数据放到clipboard的之前肯定是知道数据的大小的,这样有什么问题?
      

  2.   

    void CopyToClipboard(HWND hWndOwner, LPCTSTR strText)
    {
    if( !OpenClipboard(hWndOwner))
    {
    return;
    }
    EmptyClipboard();
    size_t cbStr = (_tcslen(strText) + 1) * sizeof(TCHAR);
    HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);
    memcpy_s(GlobalLock(hData), cbStr, strText, cbStr);
    GlobalUnlock(hData);
    // For the appropriate data formats... 
    UINT uiFormat = (sizeof(TCHAR) == sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT; 
    if (::SetClipboardData(uiFormat, hData) == NULL)  
    {   
    DWORD dwErro = GetLastError(); 
    }  
    CloseClipboard();
    GlobalFree(hData);
    }
    这是一段把字符串复制到剪切板的代码.使用方式CString Str=TEXT("XXXXXXXXX");CopyToClipboard(m_hWnd, Str);