我有一个要设置动画的编辑控件(文本字段)。我想要的动画是它滑出,为此文本字段创建了额外的一行。我能够为文本字段设置动画并使其变大,但是要显示滑动动画,我首先必须将其隐藏。这意味着整个文本字段都像是第一次创建时一样滑出,而不仅仅是添加新行。

这是我现在拥有的代码:

SetWindowPos(hwnd, HWND_TOP, x, y, newWidth, newHeight, SWP_DRAWFRAME);

ShowWindow(hwnd, SW_HIDE);

AnimateWindow(hwnd, 300, AW_SLIDE | AW_VER_NEGATIVE);

是否可以显示此动画而不隐藏它?

最佳答案

为了扩展Nick D的答案,下面的代码可以实现您想要的...

。H

#define ANIMATION_TIMER 1234
#define ANIMATION_LIMIT 8
#define ANIMATION_OFFSET 4

int m_nAnimationCount;

.cpp
void CExampleDlg::OnTimer(UINT_PTR nIDEvent)
{
    if (nIDEvent == ANIMATION_TIMER)
    {
        if (++m_nAnimationCount > ANIMATION_LIMIT)
            KillTimer(EXPAND_TIMER);
        else
        {
            CRect rcExpand;
            m_edtExpand.GetWindowRect(rcExpand);
            ScreenToClient(rcExpand);

            rcExpand.bottom += ANIMATION_OFFSET;

            m_edtExpand.MoveWindow(rcExpand);
        }
    }

    CDialog::OnTimer(nIDEvent);
}

void CExampleDlg::OnStartAnimation()
{
    m_nAnimationCount = 0;
    SetTimer(ANIMATION_TIMER, 20, NULL);
}

不要忘记在编辑控件(m_edtExpand)上设置Multiline属性

10-04 13:54