小编tal*_*tal的帖子

如何使用Windows API在透明窗口上绘制动画?

我正在尝试使用Windows API在具有透明背景的窗口上绘制动画.问题是我无法从窗口中删除以前的图形.

我设置了以下参数:

InvalidateRect(m_hWnd, &sClientRect, TRUE);  // we set the bErase parameter as TRUE
paintParams.dwFlags = BPPF_ERASE; // erase window content while copying backbuffer
paintParams.pBlendFunction = &m_sBlendfunc; // copy source image to backbuffer
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.您可以在附加图像中看到结果.我想要的动画是在屏幕上移动圆圈.我得到的(如附图所示)是他们运动的人工制品,因为在每次抽奖之前窗口没有被清除.

请参阅下面的完整代码:

#include "DrawTest.h"

DrawTest* m_sDrawTest;

DrawTest::DrawTest()
{
 m_pAnimation = NULL;
 m_sDrawTest = NULL;
 m_nFrameindex = 0;
}

DrawTest::~DrawTest(void)
{
 if(m_pAnimation)
  delete m_pAnimation;
 m_pAnimation = NULL;
 if(m_sDrawTest)
  delete m_sDrawTest;
 m_sDrawTest = NULL;
}

int DrawTest::Init(AnimationManager* pAnimationManager,HINSTANCE hInstance,int nCmdShow)
{
 //listener
 m_sDrawTest = this;

 //get anemation (sequence of …
Run Code Online (Sandbox Code Playgroud)

c++ windows transparency gdi+ wm-paint

7
推荐指数
1
解决办法
2852
查看次数

AlphaBlend 返回“false”的原因可能是什么

我正在尝试用 alpha 拉伸 HBITMAP 并将其绘制到花药 hdc。

我使用的是 StretchDIBits,然后是 AlphaBlend,如下面的代码所示。

问题是 AlphaBlend 失败并返回 false。
1. 有谁知道可能是什么原因?2. 有没有更好的为什么要拉伸和绘制透明图像?

void AnimationManager::Draw(HDC hBBDC, Instance sInstance,RECT sClientRect)
{
    // sClientRect is the hwnd rect

    int nID = GetId(sInstance.nAnemationId);
    int nFrameindex = sInstance.nFrameIndexs;

    HDC hdcScreen = GetDC(NULL);
    HDC hdcMem = CreateCompatibleDC(hdcScreen);

    BITMAP bmp;
    PBITMAPINFO pbmi;
    WORD cClrBits;

    ///******************* create PBITMAPINFO *********************///

    GetObject(m_pAnimations[nID]->m_pFramesArray[nFrameindex]->hBmp, sizeof(bmp), &bmp);
    cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);
    if(cClrBits == 1)
        cClrBits = 1;
    else if(cClrBits <= 4)
            cClrBits = 4;
    else if(cClrBits <= 8) …
Run Code Online (Sandbox Code Playgroud)

c winapi gdi

5
推荐指数
1
解决办法
859
查看次数

标签 统计

c ×1

c++ ×1

gdi ×1

gdi+ ×1

transparency ×1

winapi ×1

windows ×1

wm-paint ×1