鱼C论坛

 找回密码
 立即注册
查看: 2511|回复: 1

求助甲鱼关于多位图绘制闪烁的问题

[复制链接]
发表于 2020-7-15 15:03:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本人不算新手,但是问我很多编程术语我还是一脸懵,我的学习方法是从编程例子中找出相关知识来。
我学win32不是学着玩的,我有方向的学,所以每次都可以很快的找到我想要的知识,最近却因为一些东西卡住了。
我想做一款游戏,想要用win32来做,但是我发现我对位图操作一点都不了解,
当我要绘制多张位图的时候,我现在所学的知识来实现的话,就是load多张图片,然后轮流显示,
但是这样有个弊病,就是当我绘制背景图的时候,前景图会被消除(不懂术语),然后再绘制前景图,这样会导致前景图不断闪烁,
所以我想问问小甲鱼,我怎样才能把绘制过程放在幕后,再把绘制结果直接bitblt到设备环境里面呢?
为此我已经花费了两个月时间,求解答,谢谢。
    static HBITMAP orgBitmap, oldBitmap;
    static BITMAP  bitmap;
    static HDC  hdc, hdcMem;
    switch (message)
    {
    case WM_CREATE:   
        orgBitmap = (HBITMAP)LoadImage(NULL, TEXT("resource\\manber.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        GetObject(orgBitmap, sizeof(BITMAP), &bitmap);
        hdc = GetDC(hwnd);        
        hdcMem = CreateCompatibleDC(hdc);
        oldBitmap = (HBITMAP)SelectObject(hdcMem, orgBitmap);
        return 0;

    case WM_PAINT:
        
        TransparentBlt
        (
            hdc, 0, 0, bitmap.bmWidth*2, bitmap.bmHeight*2,
            hdcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight,
            RGB(255,255,255));
        return 0;

    case WM_ERASEBKGND:
        return 0;
      
    case WM_DESTROY:
        SelectObject(hdcMem, oldBitmap);
        DeleteDC(hdcMem);
        ReleaseDC(hwnd, hdc);   
        PostQuitMessage(0);
        return 0;

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-17 02:15:40 | 显示全部楼层
已经解决了 有gdi+就可以解决问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表