首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何消除画图时的画面闪烁问题? [已结贴,结贴人:ciahi]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ciahi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-08 09:39:09 楼主
    我要实现一个简单的动画效果

    hDcMem = CreateCompatibleDC(hdc);
    SelectObject(hDcMem, hBit);

    //此处用FillRect清除原图
    FillRect(hdc, &rt, (HBRUSH)(COLOR_WINDOW+1));

    //将图片拷贝到hdc中
    StretchBlt(hdc, 50+radius*(sinf(arc+MY_PI/2)+1),
    50+radius*(cosf(arc+MY_PI/2)+1),
    width,
    width,
    hDcMem, 0, 0, 205, 192, SRCCOPY);

    用这种方法来做图的时候,竟然闪的很~
    不知道如何解决这种问题?

    谢谢!
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • daidongsheng
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 10:05:051楼 得分:2
    OnEraseBkgnd  里直接 return true;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • stivenjia
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 10:08:242楼 得分:8
    在开一个缓冲呢?
    三缓冲
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • orbit
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 10:09:573楼 得分:2
    还可以创建memDC
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bitxinhai
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 10:11:044楼 得分:1
    双缓冲解决绘图闪烁问题,
    搜一些这方面的资料就知道了!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hfcarrey
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 10:32:085楼 得分:5
    引用 4 楼 bitxinhai 的回复:
    双缓冲解决绘图闪烁问题,
    搜一些这方面的资料就知道了!!!


    现在内存中把图片和文字画好,做好后在StretchBlt 到窗口
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Mackz
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 4

      6

      7

    发表于:2008-08-08 10:46:336楼 得分:2
    不要清除原图了,你贴上去不就覆盖了吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ciahi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 11:44:287楼 得分:0
    谢谢大家了
    我用的不是MFC

    又开了一个缓冲,确实解决了屏幕闪的问题

    但有一个新的问题,我的图片只能显示黑白两色了

    只有黑的和白的可以显示出来,其他的颜色一概都是显示黑色

    这是怎么回事???

    我中间用了一个CreateCompatibleBitmap,不会跟这个有关系吧

    现在的代码是这样的:

    hTempDc = CreateCompatibleDC(hdc);
    HBITMAP hBmp = CreateCompatibleBitmap(hTempDc, nWidth, nHeight);
    SelectObject(hTempDc, hBmp);

    hDcMem = CreateCompatibleDC(hTempDc);
    SelectObject(hDcMem[i], hBit[i]);

    FillRect(hTempDc, &rt, (HBRUSH)(COLOR_WINDOW+1));

    StretchBlt(hTempDc, 50+radius*(sinf(arc+MY_PI/2)+1),
    50+radius*(cosf(arc+MY_PI/2)+1),
    width,
    width,
    hDcMem, 0, 0, 205, 192, SRCCOPY);

    BitBlt(hdc, 0, 0, nWidth, nHeight, hTempDc, 0, 0, SRCCOPY);

    这里面是哪个环节出了问题呀???

    3Q!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ciahi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 15:51:068楼 得分:0
    再顶上去!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • IT_Fly
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 15:55:599楼 得分:10
    HBITMAP hBmp = CreateCompatibleBitmap(hTempDc, nWidth, nHeight);
    =》
    HBITMAP hBmp = CreateCompatibleBitmap(hdc, nWidth, nHeight);

    好像是这样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ciahi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-08 16:36:0410楼 得分:0
    谢谢,可以了,结贴~
    修改 删除 举报 引用 回复

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