我目前有一个CView
,它由一个集中的CImage
组成,会立即加载我的应用程序。
我想通过在启动时使CImage
淡入而不是简单地显示(我已经有一个启动画面,因此我没有要求如何设置动画{{1}来美化它}})。
为了显示我的图像,我已经覆盖了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值(我将保持为成员变量)。
但是,我不确定如何更改整个图像的alpha值?
提前致谢!
答案 0 :(得分:0)
不使用backgroundImage.Draw()
,而是使用AlphaBlend
backgroundImage.AlphaBlend(pDC->GetSafeHdc(), destRect
, CRect(0, 0, backgroundImage.GetWidth(), backgroundImage.GetHeight())
, bySrcAlpha);
在255处启动bySrcAlpha
的值,并在计时器功能中将其减去适当的值。