Вопрос

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

Я знаю основы C/C++, Win32 API и немного GDI.

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

Не прошу кода, просто несколько идей/примеров того, как это начать.Занимаясь в основном веб-материалами, я немного заржавел в Win-программировании.

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

Спасибо

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

Это было полезно?

Решение

Если у вас есть некоторый опыт работы с обработкой сообщений Windows и API Win32, это должно помочь вам начать работу.

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top