【问题标题】:Best way to create a timer on screen在屏幕上创建计时器的最佳方法
【发布时间】:2010-10-03 19:46:24
【问题描述】:

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

我知道基本的 c/c++、win32 api 和一点 gdi。

有人对如何开始这个有任何指示吗?我的程序就像把电脑变成一个大秒表(但增加了一些功能)

不要求代码,只是一些关于如何开始的想法/入门。 主要是做网络工作让我对 win 编程有点生疏了。

欢迎任何想法

谢谢

注意:由于速度的原因,我认为我必须使用 c/c++ 来执行此操作。我的秒表程序会在非常慢的电脑上运行,比如 p3 800mhz,所以速度真的很重要。

【问题讨论】:

    标签: c++ c winapi gdi


    【解决方案1】:

    如果您对 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

    【讨论】:

    • 哇!谢谢!!我一定会分析这段代码,我真的希望这对我有帮助:) 再次感谢!
    • 不要指望时间......呃......用WM_TIMER计算,因为它会不准确。更好地使用以毫秒为单位的系统时间,并以 WM_TIMER 的一秒间隔更新为当前系统时间值。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      编程 Win32 的最简单方法是通过支持库。 wxWidgets 和 Qt 都是不错的选择,而且都是免费的。它们在螺母和螺栓方面为您节省了很多。基本上,在这两种方法中,您都会创建一个包含文本框对象和计时器对象的 Window 对象,并且您只需将计时器滴答声连接到文本更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-18
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多