剪贴板

windows每个进程都有自己的资源空间, 进程内线程之间互相共享资源非常简单,但是如果不在一个进程呢...很多人都会想到一种最简单的办法.利用系统的剪贴板进行数据交换.

要利用剪贴板首先要打开剪贴板:

1.OpenClipboard(HWND hWndNewOwner);

  hWndNewOwner参数含义:是哪个窗口打开的剪贴板,如果为空,则自动关联当前任务.注意剪贴板同时不能被打开多次

2.利用剪贴版之前先清空剪贴板的内容:EmptyClipboard(VOID);

3.下面开始往剪贴板存放数据

HANDLE SetClipboardData(
UINT uFormat,
HANDLE hMem);

uFormat:剪贴板存放的数据格式

hMem:指定格式的数据句柄,如果这个句柄表示了内存数据,那么必须使用LocalAlloc来分配空间

4.HLOCAL LocalAlloc(
UINT uFlags,
UINT uBytes
);

uFlags:如何分配内存

uBytes:分配的大小

操作LocalAlloc分配的空间时候一定要在使用前LocalLock离开后LocalUnlock

5.最后一定记得关闭剪贴板CloseClipboard(void);

例子如下:

//将编辑框的数据发送到剪贴板

if(OpenClipboard())
 {
  EmptyClipboard();
  CString text;
  char* buf;
  GetDlgItem(IDC_EDIT1)->GetWindowText(text);
  HLOCAL hg = LocalAlloc(LMEM_ZEROINIT,text.GetLength()+1);
  buf = (char*)LocalLock(hg);
  strcpy(buf,text);
  LocalUnlock(hg);
  SetClipboardData(CF_TEXT,hg);
  CloseClipboard();
 }

// 接收

  if(OpenClipboard())
 {
  if(IsClipboardFormatAvailable(CF_TEXT))//剪贴板里面有这种格式的数据吗?
  {
   char* buf;
   HLOCAL  hg;
   hg = GetClipboardData(CF_TEXT);
   buf = (char*)LocalLock(hg);
   LocalUnlock(hg);
   GetDlgItem(IDC_EDIT2)->SetWindowText(buf);
  }
  CloseClipboard();
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值