Win32怎么实现用自定义动画创建和关闭窗体?

末影小末EnderMo 2021-04-29 08:46:44
不多说,上代码

MoveWindow(hWnd, 1000, 400, 320, 104, 0);
//Sleep(83);
MoveWindow(hWnd, 1000 - 66, 400, 320, 104, 0);
//Sleep(83);
MoveWindow(hWnd, 1000 - 81, 400, 320, 104, 0);
//Sleep(83);
MoveWindow(hWnd, 1000 - 91, 400, 320, 104, 0);
//Sleep(83);
MoveWindow(hWnd, 1000 - 99, 400, 320, 104, 0);
//Sleep(83);
MoveWindow(hWnd, 1000 - 106, 400, 320, 104, 0);
//Sleep(83);
MoveWindow(hWnd, 1000 - 111, 400, 320, 104, 0);

我准备用1秒的时间(30fps),也就是约等于83毫秒一帧的速率播放这动画,
这是前面几帧,后面还剩的一些就不展示了.相信这个代码的问题一看就出来了,Sleep把窗体阻塞了,那最后的结果就是动画完全没有播放,延迟后直接在(889,400)的地方显示了,这问题如何解决呢?
不要用AnimateWindow,谢谢
...全文
501 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
问题已经解决了,谢谢大家的帮助qwq
回复
Eleven 04-30
你可以创建一个线程,线程每隔一段时间给主窗口发送一个自定义消息,在自定义消息响应函数中MoveWindow
回复
引用 1 楼 zgl7903 的回复:
等待时派发消息

void _Sleep_(UINT Delay_ms)
{
  DWORD dwTick = GetTickCount() + Delay_ms;
  while(GetTickCount() < dwTick)
  {
    MSG msg;
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
      if (msg.message == WM_QUIT) break;
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    Sleep(0);
  }
}

是可以了,不过请问怎么实现在窗口创建时播放呢?
回复
zgl7903 04-29
等待时派发消息

void _Sleep_(UINT Delay_ms)
{
  DWORD dwTick = GetTickCount() + Delay_ms;
  while(GetTickCount() < dwTick)
  {
    MSG msg;
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
      if (msg.message == WM_QUIT) break;
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    Sleep(0);
  }
}

回复
发动态
发帖子
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
社区公告
暂无公告