拷贝文字到剪贴板中

//功能: 将CString转换成char*,自动区分UNICODE和ASCII
//参数: swString,需要转化的字符串
//      szBuffer,char*指针,使用完后记得使用free释放
//返回:
void ConvertToLPCSTR(char*& szBuf,CString swString)
{
#ifdef _UNICODE
 szBuf = NULL;
 UINT  nLen  = NULL;

 nLen = WideCharToMultiByte(CP_ACP, 0, swString/*wszString*/, -1, NULL, 0, NULL, NULL);

 szBuf = (char*)malloc(nLen + 1);

 int nRet = WideCharToMultiByte(CP_ACP, 0, swString, -1, szBuf, nLen, NULL, NULL);

 if (0 == nRet)
 {
  free(szBuf);
  szBuf = NULL;
 }
#else
 szBuf = NULL;
 int nLen=swString.GetLength()+1;
 szBuf = (char*)malloc(nLen + 1);
 strcpy(szBuf,swString);
#endif
}
//拷贝文字到剪贴板中
BOOL CopyTextToClipboard(CString strText,HWND hWnd=NULL)
{
 BOOL rc=OpenClipboard(hWnd);
 if(!rc)
  return rc;
 EmptyClipboard();
 char* szBuf=NULL;
 ConvertToLPCSTR(szBuf,strText);
 DWORD cch=strlen(szBuf);
 HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE,
  (cch + 1) * sizeof(char));
 if(hglbCopy==NULL)
 {
  free(szBuf);
  CloseClipboard();
  return FALSE;
 }
 char* pCopy=(char*)GlobalLock(hglbCopy);
 strcpy(pCopy,szBuf);
 GlobalUnlock(hglbCopy);
 SetClipboardData(CF_TEXT, hglbCopy);
 free(szBuf);
 CloseClipboard();
 return TRUE;
}

此条目发表在C++分类目录,贴了标签。将固定链接加入收藏夹。

发表评论