谨以共勉!
首先说明的是剪切板是系统提供的功能,可以用来实现进程间的通信,在VC中的实现也是很简单的。
以下是VC6.0 MFC环境:
if(OpenClipboard()) //首先打开一个剪切板,如果成功则返回非0值
{
HANDLE hClip; //声明一个句柄
CString str;
char *pBuf;
EmptyClipboard(); //置空这个剪切板,且得到剪切板的所有权
GetDlgItemText(IDC_EDIT1,str);//将文本框的值赋给str
hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
//申请锁定一块存放数据的内存区域
pBuf=(char *)GlobalLock(hClip);//得到指向内存区域的第一个字节指针
strcpy(pBuf,str);//将文本框的值拷贝到内存中
GlobalUnlock(hClip);//解除内存锁定
SetClipboardData(CF_TEXT,hClip);//设置数据到剪切板中
CloseClipboard();//关闭剪切板
}
这样的话,输入在文本框的内容就已经被“复制”过了,此时正处于内存区域中,比如打开一个记事本,直接粘贴就能将内存提取出来,如此就做到了进城间的通信。
以下是“粘贴”的VC实现:
if(OpenClipboard())//首先打开一个剪切板
{
if(IsClipboardFormatAvailable(CF_TEXT))//检查此时剪切板中数据是否为TEXT,可以设置成别的!
{
HANDLE hClip; //声明一个句柄
char *pBuf;
hClip=GetClipboardData(CF_TEXT);//得到剪切板的句柄
pBuf=(char *)GlobalLock(hClip);//得到指向这块内存的指针
GlobalUnlock(hClip);//解除内存锁定
SetDlgItemText(IDC_EDIT2,pBuf);//将他设置给一个文本框显示
CloseClipboard();//关闭此剪切板
}
}
这样就实现了“复制”,和“粘贴”的功能了,当然平时windows已经提供了此功能,不过我们主要还是利用它来进行进城间的通信。