0

我目前有一个CView由单个集中式组成的,CImage它在立即加载我的应用程序时显示。

我想通过CImage在启动时淡入而不是简单地显示来美化它(我已经有一个闪屏,所以我不问如何为 a 设置动画CWnd)。

为了显示我的图像,我重写了该CView::OnDraw方法,如下所示:

void CWelcomeView::OnDraw( _In_ CDC* pDC ) 
{
    CView::OnDraw( pDC );

    static CImage backgroundImage;
    static bool bImageLoaded = false;

    if( !bImageLoaded )
    {
        backgroundImage.LoadFromResource( AfxGetInstanceHandle(), IDB_WELCOMESCREEN );

        bImageLoaded = true;
    }

    CRect clientRect;
    GetClientRect( &clientRect );

    // The detination rectangle should be the same size as the image:
    POINT pointTopLeft = {(clientRect.Width()-backgroundImage.GetWidth())/2, (clientRect.Height()-backgroundImage.GetHeight())/2};
    CRect destRect( pointTopLeft, CSize( backgroundImage.GetWidth(), backgroundImage.GetHeight() ) );

    // Draw the image in the right space:
    backgroundImage.Draw( pDC->GetSafeHdc(), destRect );
}

现在我不完全确定如何在创作中淡化它。我目前的行动计划是创建一个计时器,并根据当前时间点与时钟开始时间之间的差异(我将其保留为成员变量)std::chrono::steady_clock更改 alpha 值。CImage

但是,我不确定如何整体更改图像的 alpha 值?

提前致谢!

4

1 回答 1

0

而不是使用backgroundImage.Draw(),使用AlphaBlend

backgroundImage.AlphaBlend(pDC->GetSafeHdc(), destRect
    , CRect(0, 0, backgroundImage.GetWidth(), backgroundImage.GetHeight())
    , bySrcAlpha);

从 255开始,bySrcAlpha并在计时器函数中将其递减适当的值。

于 2013-06-13T08:23:06.513 回答