簡體   English   中英

WIN32,C ++:是否可以在不隱藏窗口的情況下為窗口設置動畫?

[英]WIN32, C++: Is it possible to animate a window without hiding it?

我有一個編輯控件(文本字段),我想要動畫。 我想要的動畫是它滑出來,為這個文本字段創建一個額外的行。 我可以為我的文本字段設置動畫並使其更大,但是為了顯示我首先要隱藏它的滑動動畫。 這意味着整個文本字段滑出,好像是第一次從零開始創建,而不是僅添加新行。

這是我現在的代碼:

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);
}

不要忘記在編輯控件上設置Multiline屬性(m_edtExpand)

另一種方法是使用SetTimer函數模擬動畫,該函數將調用例程以遞增方式調整窗口大小。

我認為使用內置的AnimateWindow API是不可能的。 AnimateWindow的MSDN條目http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx表示它用於“在顯示或隱藏窗口時產生特殊效果”,AW_HIDE標志確定該功能顯示或隱藏窗口。 而且我看不到任何替代的內置函數來做你想要的。

因此,Nick D.和Alan有正確的方法來自己調整大小。 這通常是解決方案。 (我之前從未聽說過AnimateWindow。)我假設AnimateWindow在內部做了類似的事情,盡管我認為它更可靠。

顯然,在完成動畫制作之前,如果在文本框中添加或刪除了另一行,或者其他行已調整大小,則顯然需要確保Timer做正確的事情。

如果編碼不方便,還要認真考慮將動畫設置為低優先級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM