티스토리 뷰

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

}

댓글
댓글쓰기 폼