Лучший способ создать таймер на экране
Вопрос
У меня возникла идея создать таймер обратного отсчета, например 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, содержащий объект текстового поля и объект таймера, и просто связываете отметку таймера с текстовым обновлением.