C++使用MoveWindow()为按钮设置动画

C++ Animating a button with MoveWindow()

本文关键字:按钮 设置 动画 使用 MoveWindow C++      更新时间:2023-10-16

我是C++的新手,似乎被卡住了。我基本上有一个Window和一个Button(也是用CreateWindow()创建的)。我想让按钮在X轴上移动,我试着用MoveWindow()来做,但我似乎做不到动画效果。我试着把它写在for循环中,但我没有找到用什么来延迟动画。如果有任何帮助,我将不胜感激。

for (int i = 0; i < 50; i++) {
     MoveWindow(g_MovingDot, i, ButtonTop, ButtonWidth, ButtonHeight, true);
     //Delay it somehow
}

这是正确的做法吗?我只想按钮慢慢向右移动。

使用SetTimer函数在超过超时值时得到通知。

使用签名实现功能

VOID (CALLBACK* TIMERPROC)(HWND, UINT, UINT_PTR, DWORD);

并向SetTimer传递函数指针以注册回调过程。

使用全局控制变量,该变量控制窗口的动画。在下面的代码片段中,控制变量被命名为i_g
当计时器超时时,将调用回调过程。增加控制变量,稍微移动对话框元素并重新启动计时器,直到到达最终位置
动画时间由动画步数和单个步的时间间隔控制。

int g_i=0;
void CALLBACK BtnTimer( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime )
{
    KillTimer( hwnd, idEvent );
    if ( g_i < 50 )
    {
      MoveWindow(g_MovingDot, i, ButtonTop, ButtonWidth, ButtonHeight, true);
      g_i ++;
      SetTimer( hwnd, idEvent, 100 /* time milliseconds */, &BtnTimer );
    }
}
void AnimateButton( HWND hDialogWnd //* HWND from Dialog */)
{
    g_i = 0;
    SetTimer( hDialogWnd, 0 /* idEvent */, 100 /* time milliseconds */, &BtnTimer );    
}