⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 17.1.2 数据接收.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 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 + -