티스토리 뷰

.h 파일에 아래 함수 선언

 

 int CopyTextToClipboard(const char *ap_string);

 

.cpp에 아래 코드 작성

 

// 복사 코드

 

CString strTemp = _T("test");

 

const char* convertMsg;

CT2A ascii(strTemp, CP_UTF8);

convertMsg = ascii.m_psz;

CopyTextToClipboard(convertMsg);

 

// 복사 함수

 

int CTestDlg::CopyTextToClipboard(const char *ap_string)

{

   // 저장할 문자열의 길이를 구한다. ('\0'까지 포함한 크기)

   int string_length = strlen(ap_string) + 1;

 

   // 클립보드로 문자열을 복사하기 위하여 메모리를 할당한다. 

   // 클립보드에는 핸들을 넣는 형식이라서 HeapAlloc 함수 사용이 블가능하다. 

   HANDLE h_data = ::GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, string_length);

 

   // 할당된 메모리에 문자열을 복사하기 위해서 사용 가능한 주소를 얻는다. 

   char *p_data = (char *)::GlobalLock(h_data);

 

   if (NULL != p_data)

   {

      // 할당된 메모리 영역에 삽입할 문자열을 복사한다. 

      memcpy(p_data, ap_string, string_length);

 

      // 문자열을 복사하기 위해서 Lock 했던 메모리를 해제한다.

      ::GlobalUnlock(h_data);

 

      if (::OpenClipboard(m_hWnd))

      {

         ::EmptyClipboard(); // 클립보드를 연다.

         ::SetClipboardData(CF_TEXT, h_data);  // 클립보드에 저장된 기존 문자열을 삭제한다.

 

         // 클립보드로 문자열을 복사한다.

         ::CloseClipboard(); // 클립보드를 닫는다.

      }

   }

 

   return 0;

}