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

时间:2009-01-27 17:54:29

标签: c++ c winapi gdi

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

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

任何人都有关于如何开始这个的指示?我的程序就像把计算机变成一个大秒表(但增加了功能)

不要求代码,只是关于如何启动它的一些想法/引子。 主要做网络的东西让我在win编程中有点生疏。

欢迎任何想法

由于

注意:由于速度的原因,我认为我必须用c / c ++来做这件事。我的秒表程序可以在非常慢的PC上运行,类似于p3 800mhz,所以速度非常重要。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

编写Win32的最简单方法是通过支持库。 wxWidgets和Qt都是不错的选择,而且都是免费的。他们为你节省了很多钱。螺栓侧。基本上,在你创建一个包含文本框对象和计时器对象的Window对象时,你只需将计时器标记连接到文本更新。