关于复制粘贴剪切板功能VC中的实现!

首先说明的是剪切板是系统提供的功能,可以用来实现进程间的通信,在VC中的实现也是很简单的。
以下是VC6.0 MFC环境:

[cpp]  view plain copy print ?
  1. if(OpenClipboard()) //首先打开一个剪切板,如果成功则返回非0值  
  2. {   
  3.  HANDLE hClip;      //声明一个句柄  
  4.  CString str;  
  5.  char *pBuf;  
  6.  EmptyClipboard();  //置空这个剪切板,且得到剪切板的所有权  
  7.  GetDlgItemText(IDC_EDIT1,str);//将文本框的值赋给str  
  8.  hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);  
  9.  //申请锁定一块存放数据的内存区域  
  10.  pBuf=(char *)GlobalLock(hClip);//得到指向内存区域的第一个字节指针  
  11.  strcpy(pBuf,str);//将文本框的值拷贝到内存中  
  12.  GlobalUnlock(hClip);//解除内存锁定  
  13.  SetClipboardData(CF_TEXT,hClip);//设置数据到剪切板中  
  14.  CloseClipboard();//关闭剪切板  
  15.   
  16.      
  17. }  


 

这样的话,输入在文本框的内容就已经被“复制”过了,此时正处于内存区域中,比如打开一个记事本,直接粘贴就能将内存提取出来,如此就做到了进城间的通信。

以下是“粘贴”的VC实现:

[cpp]  view plain copy print ?
  1. if(OpenClipboard())//首先打开一个剪切板  
  2. {  
  3.  if(IsClipboardFormatAvailable(CF_TEXT))//检查此时剪切板中数据是否为TEXT,可以设置成别的!  
  4.  {  
  5.  HANDLE hClip; //声明一个句柄  
  6.  char *pBuf;  
  7.  hClip=GetClipboardData(CF_TEXT);//得到剪切板的句柄  
  8.  pBuf=(char *)GlobalLock(hClip);//得到指向这块内存的指针  
  9.  GlobalUnlock(hClip);//解除内存锁定  
  10.  SetDlgItemText(IDC_EDIT2,pBuf);//将他设置给一个文本框显示  
  11.  CloseClipboard();//关闭此剪切板  
  12.  }  
  13. }   


 

这样就实现了“复制”,和“粘贴”的功能了,当然平时windows已经提供了此功能,不过我们主要还是利用它来进行进城间的通信。


原文:http://blog.csdn.net/jj12345jj198999/article/details/6653905

你可能感兴趣的:(Windows)