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,谢谢
...全文
773 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
问题已经解决了,谢谢大家的帮助qwq
Eleven 2021-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 2021-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);
  }
}

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧