📄 17.1.2 数据接收.txt
字号:
17.1.2 数据接收
现在开始编写接收端的程序。双击 Clipboard程序主界面对话框资源上的【接收】按钮, VC++将为
我们自动创建该按钮的单击命令响应函数: OnBtnRecv,然后在此函数中添加代码以实现从剪贴板接
收数据的功能,结果如例 17-2所示。
例17-2
void CClipboardDlg : :OnBtnRecv()
// TODO : Add your control notification handler code here
if(OpenClipboard())
if(IsClipboardFormatAvailable(CF_TEXT) )
HANDLE hClip ;
char *pBuf ;
hClip=GetClipboardData(CF_TEXT) ;
pBuf= (char*)GlobalLock(hClip) ;
GlobalUnlock(hClip) ;
SetDlgItemText(IDC_EDIT_RECV, pBuf) ;
CloseClipboard() ;
同样地,在接收端也需要调用 OpenClipboard函数打开剪贴板。但要注意,在接收端不应调用
EmptyClipboard函数,因为这时是从剪贴板中得到数据。在获得数据之前,应该查看一下剪贴板中
是否有我们想要的特定格式的数据,这可以通过调用 IsClipboardFOI matAvailable函数实现,该
函数的原型声明如下所示 :
BOOLIsClipboardFormatAvailable(UINT format} ;
IsClipboardFormatAvailable函数用来检测剪贴板上是否包含了参数format指定的特定格式的数
据。如果剪贴板上的数据格式可用,那么该函数返回非O值:否则返回O值。因此在OnBtnRecv函数中
通过调用IsClipboardFmmatAvailable函数,判断剪贴板上文本格式的数据是否可用,若可用,再接
收剪贴板上的数据。
从剪贴板上获得数据应该调用GetClipboardData函数,该函数将从剪贴板中获得指定格式的数据,
当然,前提是当前已经打开了剪贴板。 GetClipboardData函数的原型声明如下所示:
HANDLE GetClipboardData(UINT uFormat) ;
GetClipboardData函数根据参数 uFormat指定的格式,返回一个以指定格式存在的剪贴板对象的句
柄。所以,上述 OnBtnRecv函数中定义一个句柄变量:hClip,然后调用 GetClipboardData函数得到
文本格式 CCFTEXT)的数据,并把该数据句柄保存到 hClip变量中。
同样,如果想要使用指针类型的内存地址,仍然需要调用GlobalLock函数进行一个转换,即把句柄
ChClip)转换为地址CpBuf)。接着,就可以调用GlobalUnlock函数对内存对象进行解锁。然后,可以
调用SetDlgltemText函数将从剪贴板中获得的数据放置到接收编辑框控件中。
最后,一定要记住调用CloseClipboard函数关闭剪贴板。,
Build井运行Clipboard程序,首先,在窗口左边的编辑框中任意输入一些数据。之后,单击【发送】
按钮,接着单击【接收】按钮,可以看到,这时窗口右边的编辑框中就收到了发送的数据,程序运
行结果如图 17.3所示。
图 17.3在同一个进程中利用剪贴板实现数据发送和接收功能
另外,我们也可以在记事本程序中输入一些数据,并复制该数据,然后,在本程序中单击【接收】
按钮,这时,在窗口右边的编辑框中也可以看到从记事本程序中复制的数据。读者可以自行测试一
下。
因为剪贴板是系统提供的,所有进程都可以访问它,所以可以采用剪贴板作为进程间
通信的一种方式,并且正如读者所看到的这样,采用这种方式实现进程间的通信,代码的编写比较
简单。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -