沼泽-火 发表于 2020-7-15 15:03:53

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

本人不算新手,但是问我很多编程术语我还是一脸懵,我的学习方法是从编程例子中找出相关知识来。
我学win32不是学着玩的,我有方向的学,所以每次都可以很快的找到我想要的知识,最近却因为一些东西卡住了。
我想做一款游戏,想要用win32来做,但是我发现我对位图操作一点都不了解,
当我要绘制多张位图的时候,我现在所学的知识来实现的话,就是load多张图片,然后轮流显示,
但是这样有个弊病,就是当我绘制背景图的时候,前景图会被消除(不懂术语),然后再绘制前景图,这样会导致前景图不断闪烁,
所以我想问问小甲鱼,我怎样才能把绘制过程放在幕后,再把绘制结果直接bitblt到设备环境里面呢?
为此我已经花费了两个月时间,求解答,谢谢。
    static HBITMAP orgBitmap, oldBitmap;
    static BITMAPbitmap;
    static HDChdc, 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);
    }

沼泽-火 发表于 2020-7-17 02:15:40

已经解决了 有gdi+就可以解决问题了
页: [1]
查看完整版本: 求助甲鱼关于多位图绘制闪烁的问题