2009-01-27 106 views
3

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

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

任何人有任何关于如何启动这个指针?我的程序就像是把电脑变成一个大秒表(但增加了功能)

不要求代码,只是一些想法/引发如何开始这个。 主要是网络的东西让我有点生疏赢得编程。

任何想法,欢迎

感谢

注:我觉得我有/ C++,因为速度的C至做到这一点。我的秒表程序会运行在非常慢的pc上,像p3 800mhz,所以速度非常重要。

+0

查看大图或全屏显示? – Grant 2009-01-27 18:09:39

回答

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

+0

哇!谢谢!!我一定会分析这个代码,我真的希望这能帮助我:) 再次感谢! – AntonioCS 2009-01-27 21:25:30

0

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

0

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

编程Win32最简单的方法是通过一个支持库。 wxWidgets和Qt是不错的选择,并且都是免​​费的。它们可以节省你很多的螺母。基本上,你都要创建一个包含文本框对象和计时器对象的窗口对象,并且只需将计时器滴答线连接到文本更新。