C ++使用MoveWindow()动画一个按钮

时间:2015-11-26 16:55:23

标签: c++ animation winapi window

我是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
}

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

1 个答案:

答案 0 :(得分:1)

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