Лучший способ создать таймер на экране - PullRequest
3 голосов
/ 27 января 2009

У меня была идея создать на экране таймер обратного отсчета, например 01:02 (полный размер). Во-первых, я понятия не имею, с чего начать.

Я знаю базовый c / c ++, win32 api и немного gdi.

У кого-нибудь есть указания, как начать это? Моя программа была бы похожа на превращение компьютера в большой секундомер (но с дополнительными функциями)

Не спрашивая код, просто некоторые идеи / учебники для начинающих о том, как начать это. В основном программирование в интернете сделало меня немного ржавым.

Любые идеи приветствуются

Спасибо

Примечание: я думаю, что я должен делать это с c / c ++ из-за скорости. Моя программа секундомера работала бы на очень медленном компьютере, примерно 800 МГц, поэтому скорость действительно важна.

Ответы [ 3 ]

3 голосов
/ 27 января 2009

Если у вас есть некоторый опыт работы с обработкой сообщений 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 */ 
 } 

Вот хорошая ссылка на использование таймеров:

Использование таймеров

0 голосов
/ 29 января 2009

Часы работают с одной сменой экрана в секунду; 800 МГц процессор обрабатывает около 800 миллионов команд в секунду. Это примерно на 799 миллионов больше, чем нужно, поэтому эффективность НЕ является проблемой. Это все еще будет работать в Jvascript внутри браузера. Впрочем, это не значит, что C или C ++ не подходят.

Самый простой способ программирования Win32 - через вспомогательную библиотеку. wxWidgets и Qt - хороший выбор, и оба бесплатны. Они спасут вас немного на стороне болтов. По сути, в обоих случаях вы создаете объект Window, содержащий объект текстового поля и объект таймера, и просто подключаете тик таймера к обновлению текста.

0 голосов
/ 27 января 2009

Создайте таймер, пусть ваше приложение отреагирует на событие таймера, отправив сообщение рисования себе. Обязательно удалите таймер при выходе из приложения.

...