Есть ли способ получить текущий ход таймера, который создается функцией SetTimer?Как получить ход таймера, созданного с помощью SetTimer()
0
A
ответ
1
Вот реализация комментария Ханса. При нажатии кнопки отображается оставшееся время до следующего запланированного (ожидаемого) сообщения WM_TIMER. Создав в режиме отладки, я получаю консоль для отображения моих сообщений, так как это быстрый и простой (читай: грязный) способ получить как графический интерфейс, так и консоль.
main.cpp
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include "resource.h"
HINSTANCE hInst;
DWORD tickCountInitial;
DWORD timerInterval = 10000;
DWORD nextTimerFired;
BOOL CALLBACK DlgMain(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
tickCountInitial = GetTickCount();
SetTimer(hwndDlg, 666, timerInterval, NULL);
nextTimerFired = tickCountInitial + timerInterval;
}
return TRUE;
case WM_TIMER:
{
DWORD tickCountCurrent = GetTickCount();
printf("Ticks elapsed: %d\n", tickCountCurrent - tickCountInitial);
nextTimerFired = tickCountCurrent + timerInterval;
MessageBeep(MB_OK);
}
return 0;
case WM_CLOSE:
{
EndDialog(hwndDlg, 0);
}
return TRUE;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_BUTTON1:
{
DWORD tickCountCurrent = GetTickCount();
printf("Ticks till next WM_TIMER message: %d\n", nextTimerFired - tickCountCurrent);
}
break;
}
}
return TRUE;
}
return FALSE;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
hInst=hInstance;
InitCommonControls();
return DialogBox(hInst, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DlgMain);
}
resource.h
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif
#define DLG_MAIN 100
#define IDC_BUTTON1 40000
resource.rc
// Generated by ResEdit 1.6.2
// Copyright (C) 2006-2014
// http://www.resedit.net
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
DLG_MAIN DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Ms Shell Dlg"
{
PUSHBUTTON "Check Remaining", IDC_BUTTON1, 41, 32, 104, 31, 0, WS_EX_LEFT
}
//
// Manifest resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
1 RT_MANIFEST ".\\manifest.xml"
Смежные вопросы
- 1. Как показать ход таймера в процентах
- 2. SetTimer с уникальным идентификатором
- 3. SetTimer IDEvent проблемы с возвратом
- 4. Передача данных пользователя с помощью SetTimer
- 5. Сброс изображений с помощью setTimer (onclick)
- 6. SetTimer в VC++
- 7. Как просмотреть ход резьбы с помощью progressBar
- 8. Как нарисовать внутренний ход с помощью Java2D
- 9. Как рисовать «прозрачный ход» с помощью Raphael.js
- 10. Нежелательная прекращение Thread созданного таймера обратного вызова
- 11. получить ход вызова метода
- 12. Установить имя потока, созданный с SetTimer() API
- 13. Inno setup: Показать изображения с помощью таймера
- 14. Как получить интерфейс с объекта, созданного с помощью TClass?
- 15. SetTimer зависит от WS_EX_COMPOSITED?
- 16. JQuery получить элемент в функции SetTimer
- 17. SetTimer не меняет временной интервал
- 18. загрузка изображения с помощью firebase. наклоняешь получить ход загрузки
- 19. Как получить доступ к информации в потоке с помощью таймера?
- 20. Как получить функцию таймера с помощью boost в C++?
- 21. Как получить ход данных из формы HTML
- 22. Отправка сообщений с помощью таймера
- 23. Как получить значение Radiobuttonfor (созданного с помощью петли)
- 24. Как получить доступ к элементам объекта, созданного с помощью вектора
- 25. Как получить информацию от объекта, созданного с помощью JSON
- 26. Как получить последнюю страницу созданного PDF с помощью mPDF
- 27. Как получить SKSpriteNode элемента, созданного с помощью редактора SpriteKit?
- 28. Как получить ширину и высоту документа, созданного с помощью FPDF
- 29. Использование функции Windows SetTimer()
- 30. 2 таймера с использованием OnTimer (идентификатор UINT_PTR) с помощью vC++
Что вы имеете в виду под 'текущий прогресс'? Вы хотите узнать (а), как долго это было изначально создано, или (б), как долго он длился последний или (в), как долго он будет срабатывать дальше? – enhzflep
Нет. Сохраните возвращаемое значение GetTickCount() в переменной при запуске таймера. Обновите его в обработчике WM_TIMER. Теперь вы всегда знаете, сколько осталось времени, просто вычитая это значение переменной из GetTickCount(). –
Решение с GetTickCount() кажется разумным, я добавлю ответ, как только я его реализую. –