VS2010中CString和char*数据的转换

做孙鑫老师进程间通信之剪切板实验,由于历程用的是VC6.0,  我用的是VS2010,在一些数据类型上有些不兼容。

比如   strcpy(pBuf, str);  //str是CSting类型,函数要求是(const char*),编译时出错。

考虑从编辑框获得数据   GetDlgItemText(IDC_EDIT_SEND,str);

str的数据要复制给 pBuf,采用下面操作即可

        int str_len=0;

str_len = str.GetLength()+1;              //str的长度
temp = (char*)malloc(str_len);
for(int i=0;i<str_len;i++)
{
temp[i]=str.GetAt(i);
}
strcpy(pBuf, temp);
free(temp);


char* 直接复制给CString没问题,发送和接收按钮的回调函数如下:


void CClipbordDlg::OnBnClickedButtonSend()
{
// TODO: 在此添加控件通知处理程序代码
if(OpenClipboard())
{
CString str;
HANDLE hClip;
char *pBuf;
char *temp;
int str_len=0;


EmptyClipboard();
GetDlgItemText(IDC_EDIT_SEND,str);
hClip = GlobalAlloc(GMEM_MOVEABLE,str.GetAllocLength()+1);


pBuf = (char*)GlobalLock(hClip);
str_len = str.GetLength()+1;  //str的长度
temp = (char*)malloc(str_len);
for(int i=0;i<str_len;i++)
{
temp[i]=str.GetAt(i);
}
strcpy(pBuf, temp);
free(temp);
str.ReleaseBuffer();
GlobalUnlock(hClip);  
SetClipboardData(CF_TEXT,hClip);
CloseClipboard();
}
}




void CClipbordDlg::OnBnClickedButtonRecv()
{
// TODO: 在此添加控件通知处理程序代码
     if(OpenClipboard())//打开剪切板  
    {  
        if(IsClipboardFormatAvailable(CF_TEXT))//判断剪切板的内容格式是否是我们需要的  
        {  
            HANDLE hChip;  
            char *pBuf;
CString str;
            hChip=GetClipboardData(CF_TEXT);//返回一个句柄  
            pBuf=(char*)GlobalLock(hChip);//获取内容  
str = pBuf;
            GlobalUnlock(hChip);  
            SetDlgItemText(IDC_EDIT_RECV,str);//设置内容           
        }  
CloseClipboard();
    }  
  
}


结果如下



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值