吉林大学远程教育课件(8).ppt
上传人:sy****28 上传时间:2024-09-12 格式:PPT 页数:30 大小:215KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

吉林大学远程教育课件(8).ppt

吉林大学远程教育课件(8).ppt

预览

免费试读已结束,剩余 20 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

吉林大学远程教育课件第13章动态数据交换和对象链接与嵌入在任何时候,只有一个程序可以打开剪贴板。函数OpenClipboard用于打开一个剪贴板,其函数原型定义如下:如果要把文本复制到剪贴板上,首先必须使用GlobalAlloc函数分配所需的全局内存块,这个全局内存块是可移动的,剪贴板中的文本数据就记录在其中。GlobalAlloc函数成功调用后会返回一个标识该内存块的句柄,GlobalAlloc函数原型定义如下:有了指向内存块的指针就可以通过多种手段向该内存块中复制数据了。函数SetClipboardData可以实现将数据复制到剪贴板上。函数SetClipboardData的原型定义如下:因此,剪贴板每次只能保持一个数据项。不过可以在打开和关闭剪贴板之间,多次调用SetClipboardData函数来设置剪贴板中的数据,并且每次可以指定不同的数据格式。获取剪贴板上的文本是把文本复制到剪贴板的逆过程,但它的操作过程相对复杂一些。首先,必须判断剪贴板上的数据是否为文本内容,这可以通过调用函数IsClipboardFormatAvailable来实观。如果剪贴板上的数据为CF_TEXT,则该函数的返回值为TRUE,否则为FALSE,这个函数的原型定义如下:如果剪贴板上的数据格式是文本格式,则继续调用函数OpenClipboard打什剪贴权,然后调用函数GetClipboardData获得剪贴板上的数据。函数GetClipboardData的原型定义如下:13.1.2剪贴板应用实例下面是一个在程序中操纵剪贴板的例子。在例的消息处理函数中,首先通过调用函数setClipboardViewer把程序的主窗口加入到剪贴板例览器链表中。函数SetClipboardViewer的原型定义如下:剪贴板链表中的元素发生变化时将触发WM-CHANGECBCHAIN消息,在WM_CHANGECBCHAIN消息的wParam参数中记录了当前正被清除的窗口句柄,而lParam参数中记录了链表中的下一个窗口的句柄。intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){MSGmsg;if(!MyRegisterClass(hInstance)){returnFALSE;}if(!InitInstance(hInstance,iCmdShow)){returnFALSE;}//消息循环while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}returnmsg.wParam;}//函数:WndProc//作用:消息处理LRESULTCALLBACKWndProc(HWNDhwnd,UINTiMsg,WPARAMwParam,LPARAMlParam){staticHWNDhwndNextViewer;HGLOBALhGMem;//全局内存句柄HDChdc;//设备描述表句柄PSTRpGMem;//全局内存指针PAINTSTRUCTps;RECTrect;switch(iMsg){caseWM_CREATE://窗口创建hwndNextViewer=SetClipboardViewer(hwnd);return0;caseWM_CHANGECBCHAIN://剪贴板链表发生改变if((HWND)wParam==hwndNextViewer)hwndNextViewer=(HWND)lParam;elseif(hwndNextViewer)SendMessage(hwndNextViewer,iMsg,wParam,lParam);return0;caseWM_DRAWCLIPBOARD://更新对剪贴板数据的显示if(hwndNextViewer)SendMessage(hwndNextViewer,iMsg,wParam,lParam);InvalidateRect(hwnd,NULL,TRUE);return0;caseWM_PAINT://重绘窗口hdc=BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);//获取客户区OpenClipboard(hwnd);//打开剪贴板hGMem=GetClipboardData(CF_TEXT);//获取剪贴板数据if(hGMem!=NULL){pGMem=(PSTR)GlobalLock(hGMem);//锁定内存块DrawText(hdc,pGMem,-1,&r