WIN32,C ++:是否有可能进行动画的窗口不隐藏呢?(WIN32, C++: Is it pos

2019-08-01 08:22发布

我有我想动画的编辑控件(文本字段)。 我希望动画是它滑出,创造了该文本字段一个额外的行。 我能够动画我的文本字段,并能使其更大,然而以显示滑动动画我首先必须将其隐藏。 这意味着整个文本字段滑出仿佛是第一次从无到有创建,而不是仅仅增加一个新的生产线。

这是我现在的代码:

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

ShowWindow(hwnd, SW_HIDE);

AnimateWindow(hwnd, 300, AW_SLIDE | AW_VER_NEGATIVE);

是否有可能显示此动画不隐藏呢?

Answer 1:

为了扩大尼克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)



Answer 2:

另一种方法是模拟动画SetTimer函数 ,它将调用一个程序来调整窗口大小,增量。



Answer 3:

我认为这是不可能的内置AnimateWindow API来完成。 在MSDN进入AnimateWindow http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx说,它是用来“产生特殊效果显示或隐藏窗口时”,并且AW_HIDE标志确定该函数要么显示或隐藏的窗口。 我不能看到内置的功能,做你想做的任何选择。

因此,尼克D.和艾伦有编码调整自己的正确的方法。 这往往是解决方案。 (我从来没有听说过AnimateWindow之前)。我想AnimateWindow做一些非常相似的内部,但我想这是更可靠。

您也显然需要确保定时器做正确的事情,如果另一行添加或删除文本框,或者其大小,否则,它的完成动画之前。

并给予认真考虑做动画低优先级,如果是不方便的代码。



文章来源: WIN32, C++: Is it possible to animate a window without hiding it?