首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
VC/MFC
基础类
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
如何使用结构体做函数参数并实现剪贴板功能,具体代码想如下那般?
[无满意答案结帖]
加为好友
发送私信
在线聊天
lcy_888
月之吻
等级:
可用分等级:
中农
总技术分:
20
总技术分排名:
179389
结帖率:
100.00%
发表于:
2008-11-04 11:41:04
楼主
struct MyFormatData1//结构体
{
int row;
CStringArray val;
};
MyFormatData1 data;
void CopyData(data)//给结构体赋值并将其放置进自定义格式的剪贴板以便在程序另一模块中调用
{
UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT1");
if(OpenClipboard(AfxGetMainWnd()->m_hWnd) && EmptyClipboard())
{
CString str1,str2;
str1="thank";
str2="good";
row=2;
data.val.Add(str1);
data.val.Add(str2);
HGLOBAL clipbuffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormatData1));
MyFormatData1 * buffer = (MyFormatData1*)GlobalLock(clipbuffer);
//GlobalUnlock(clipbuffer);
//保存到内存
*buffer = data;
//保存到剪贴板
GlobalUnlock(clipbuffer);
SetClipboardData(format,clipbuffer);
}
void PastData(void)//从剪贴板获取自定义格式的数据并存入结构体以供返回(这儿我不知道应将函数定义为什么类型)
{
UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT1");
MyFormatData1 data;
if(OpenClipboard(AfxGetMainWnd()->m_hWnd))
{
HANDLE hData =GetClipboardData(format);
if(hData)
{
MyFormatData1 * buffer = (MyFormatData1*)GlobalLock(hData);
data = *buffer;
}
GlobalUnlock(hData);
CloseClipboard();
return data;
}
要想实现如上功能,如何正确实现,请高人指点秘经,在此谢谢了.
问题点数:
40
回复次数:
3
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lcy_888
月之吻
等级:
可用分等级:
中农
总技术分:
20
总技术分排名:
179389
发表于:
2008-11-04 11:46:12
1
楼 得分:
0
第一个函数弄错了,纠正一下.
void CopyData(data)//给结构体赋值并将其放置进自定义格式的剪贴板以便在程序另一模块中调用
{
UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT1");
if(OpenClipboard(AfxGetMainWnd()->m_hWnd) && EmptyClipboard())
{
CString str1,str2;
str1="thank";
str2="good";
data.row=2;
data.val.Add(str1);
data.val.Add(str2);
HGLOBAL clipbuffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormatData1));
MyFormatData1 * buffer = (MyFormatData1*)GlobalLock(clipbuffer);
//GlobalUnlock(clipbuffer);
//保存到内存
*buffer = data;
//保存到剪贴板
GlobalUnlock(clipbuffer);
SetClipboardData(format,clipbuffer);
}
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
shuyisheng
shuyisheng
等级:
可用分等级:
贫农
总技术分:
103
总技术分排名:
102974
发表于:
2008-11-04 11:51:32
2
楼 得分:
0
if(OpenClipboard(AfxGetMainWnd()->m_hWnd) && EmptyClipboard())
{
EmptyClipboard()
}
应该写成if(OpenClipboard(AfxGetMainWnd()->m_hWnd))
不然,EmptyClipboard()里面,重复执行了。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lcy_888
月之吻
等级:
可用分等级:
中农
总技术分:
20
总技术分排名:
179389
发表于:
2008-11-04 11:58:22
3
楼 得分:
0
为什么会呢,还有,就是我的代码虽然编译通过,但在执行时却遇到了麻烦,好像分配内存时引起的.
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结帖去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友