2010-04-22 4 views
0

나는 아래의 코드를 사용하여 붙여 넣기를 복사합니다.하지만 전체 컨텍스트를 복사하지 않고 그냥 문자 몇 개를 복사하고 정크 값으로 남겨 둡니다. if char *를 사용하여 데이터 버퍼를 얻고 변경합니다. 멀티 바이트 지원 프로젝트 설정 ... 그것은 이MFC에서 SetClipboardData를 사용하여 copypaste 할 수 없습니까?

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
저를 도와주세요 .. 그것도 작동하지 않습니다, 내가 유니 코드 형식을 지원하기 위해 느슨한 나는 또한 CF_UNICODETEXT를 사용하여 시도 후 work..but합니다

복사 :

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

'CF_UNICODETEXT' 이후'sizeof (WCHAR)'이어야한다고 생각합니다. – jww

관련 문제