3

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

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

有人对如何开始有任何指示吗?我的程序就像将计算机变成一个大秒表(但具有附加功能)

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

欢迎任何想法

谢谢

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

4

3 回答 3

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 */ 
 } 

这是使用计时器的一个很好的链接:

使用定时器

于 2009-01-27T18:48:13.057 回答
0

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

于 2009-01-27T18:08:23.667 回答
0

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

The easiest way to program Win32 is through a supporting library. wxWidgets and Qt are good choices, and both free. They save you quite a bit on the nuts & bolts side. Basically, in both you'd create a Window object containing a textbox object and a timer object, and you'd just wire the timer tick to a text update.

于 2009-01-29T10:43:36.460 回答