c ++ gdi动画无效

Ram*_*lol 2 c++ winapi gdi repaint visual-c++

我试图用gdi创建球动画,但我不能让它工作.我用它创造了一个球

   Graphics graphics(hdc);
Run Code Online (Sandbox Code Playgroud)

钢笔(颜色(255,0,0,255)); graphics.DrawEllipse(&pen,sf,0,10,10); 我有while循环,循环并添加1到sf值基本上像这个sf ++; 比我尝试重新绘制窗口(它不起作用)所以生病最终有一个以上的圈; /这里是循环(循环是int WM_PAINT)

while(sd==1)//sd equals 1
    {
        sf++;
        onPaint(hdc);
        InvalidateRect (hWnd, NULL, TRUE);// this should repaint the window but it doesn't
        UpdateWindow(hWnd);
    }
Run Code Online (Sandbox Code Playgroud)

提前谢谢拉米

Tas*_*sos 5

为了实现动画,我建议你使用计时器.例如:

int OnCreate(HWND window, WPARAM wParam, LPARAM lParam)
{
   SetTimer(window, TIMER_ID, 1000, 0);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在窗口将每秒(1000毫秒)收到WM_TIMER消息.你应该处理它们:

int OnTimer(HWND window, WPARAM wParam, LPARAM lParam)
{
   if(TIMER_ID == wParam)
   {
      /*do stuff*/
      InvalidateRect(window, NULL, TRUE);//force window to repaint
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么你需要处理WM_PAINT消息来进行绘图

int OnPaint(HWND window, WPARAM wParam, LPARAM lParam)
{
   PAINTSTRUCT ps;
   HDC dc = BeginPaint(&ps);
   Graphics graphics(hdc);
   graphics.Draw...
   EndPaint(&ps);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)