首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何使用结构体做函数参数并实现剪贴板功能,具体代码想如下那般? [无满意答案结帖]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lcy_888
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于: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  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lcy_888
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 11:46:121楼 得分: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
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 11:51:322楼 得分:0
    if(OpenClipboard(AfxGetMainWnd()->m_hWnd) && EmptyClipboard())
    {
          EmptyClipboard()
    }

    应该写成if(OpenClipboard(AfxGetMainWnd()->m_hWnd))
    不然,EmptyClipboard()里面,重复执行了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lcy_888
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-04 11:58:223楼 得分:0
    为什么会呢,还有,就是我的代码虽然编译通过,但在执行时却遇到了麻烦,好像分配内存时引起的.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved