代码之家  ›  专栏  ›  技术社区  ›  AntonioCS

在屏幕上创建计时器的最佳方法

  •  3
  • AntonioCS  · 技术社区  · 16 年前

    我的想法是在屏幕上创建一个倒计时,比如01:02(全屏)。 有一件事是我真的不知道如何开始。

    有人对如何开始这个有什么建议吗?我的程序就像是把电脑变成一个大秒表(但有附加功能)

    不需要代码,只需要一些关于如何开始的想法/入门知识。

    欢迎提出任何意见

    谢谢

    注意:由于速度的原因,我想我必须使用c/c++来实现这一点。我的秒表程序会在非常慢的pc上运行,比如p380MHz,所以速度非常重要。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Phaedrus    16 年前

    如果您对windows消息处理和Win32 API有一定的经验,这应该可以帮助您入门。

    LRESULT WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
      HDC hdc; 
      PAINTSTRUCT ps; 
      RECT r; 
      char szBuffer[200]; 
      static int count = 120; 
      int seconds = 0;
      int minutes = 0;
      int hours  = 0;
    
      switch (message) { 
      case WM_CREATE: 
        // create a 1 second timer 
        SetTimer (hwnd, ID_TIMER, 1000, NULL); 
        return 0;      
    
      case WM_PAINT:
        if(count > 0)
        {
            hdc = BeginPaint (hwnd, &ps); 
            GetClientRect (hwnd, &r);
            hours = count / 3600;
            minutes = (count / 60) % 60;
            seconds = count % 60;
            wsprintf (szBuffer, "Hours: %d Minutes: %d Seconds: %d", hours, minutes, seconds); 
            DrawText (hdc, szBuffer, -1, &r, DT_LEFT); 
            EndPaint (hwnd, &ps); 
        }
        else
        {
            SendMessage (hwnd, WM_CLOSE, 0, 0L)
        }
        return 0; 
    
      case WM_TIMER: 
        count--;       
        InvalidateRect (hwnd, NULL, TRUE);
        return 0;        
    
      case WM_DESTROY: 
        KillTimer (hwnd, ID_TIMER); 
        PostQuitMessage (0); 
        return 0; 
      }  /* end switch */ 
     } 
    

    这里有一个关于使用计时器的好链接:

    Using Timers

        2
  •  0
  •   Joe Soul-bringer    16 年前

    创建计时器,让应用程序通过向自身发送绘制消息来响应计时器事件。请确保在应用程序退出时删除计时器。

        3
  •  0
  •   MSalters    16 年前

    时钟以每秒一次屏幕切换的速度运行;800MHz CPU每秒处理约8亿条指令。这大约比你需要的多7.99亿,所以效率不是问题。它仍然可以在浏览器中的Jvascript中工作。但这并不意味着C或C++是不合适的。

    编写Win32的最简单方法是通过支持库。wxWidgets和Qt都是不错的选择,而且都是免费的。他们在坚果上为你节省了不少钱;螺栓侧边。基本上,在这两种方法中,您将创建一个包含textbox对象和timer对象的窗口对象,并且您只需将timer勾号连接到文本更新。