From c9d11a85cc5fe69811fd4dc902fb41d0ccd96387 Mon Sep 17 00:00:00 2001 From: cody271 Date: Tue, 22 Aug 2017 21:52:02 -0700 Subject: [PATCH] uiTimer() Refactor TimerHandler for Windows timer IDs --- windows/uipriv_windows.hpp | 28 +++++++++++++++++----------- windows/utilwin.cpp | 3 +-- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/windows/uipriv_windows.hpp b/windows/uipriv_windows.hpp index c96d7a1a..660b57c3 100644 --- a/windows/uipriv_windows.hpp +++ b/windows/uipriv_windows.hpp @@ -77,17 +77,6 @@ extern void setWindowInsertAfter(HWND hwnd, HWND insertAfter); extern HWND getDlgItem(HWND hwnd, int id); extern void invalidateRect(HWND hwnd, RECT *r, BOOL erase); -struct TimerHandler { - int(*f)(void *data); - void *data; - TimerHandler() {} - TimerHandler(int(*f)(void *data), void *data) { - this->f = f; - this->data = data; - } -}; -extern std::map timerHandlers; - // text.cpp extern WCHAR *windowTextAndLen(HWND hwnd, LRESULT *len); extern WCHAR *windowText(HWND hwnd); @@ -106,8 +95,25 @@ extern const char *initUtilWindow(HICON hDefaultIcon, HCURSOR hDefaultCursor); extern void uninitUtilWindow(void); // main.cpp +struct TimerHandler { +public: + TimerHandler() : TimerHandler(NULL, NULL) {} + TimerHandler(int(*f)(void *data), void *data) + { + this->f = f; + this->data = data; + } + int operator()() + { + return this->f(this->data); + } +private: + int(*f)(void *data); + void *data; +}; extern int registerMessageFilter(void); extern void unregisterMessageFilter(void); +extern std::map timerHandlers; // parent.cpp extern void paintContainerBackground(HWND hwnd, HDC dc, RECT *paintRect); diff --git a/windows/utilwin.cpp b/windows/utilwin.cpp index 7a27df4a..89f2789a 100644 --- a/windows/utilwin.cpp +++ b/windows/utilwin.cpp @@ -39,8 +39,7 @@ static LRESULT CALLBACK utilWindowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, L return 0; case WM_TIMER: id = (UINT_PTR)wParam; - TimerHandler timer = timerHandlers[id]; - if (!timer.f(timer.data)) { + if (!timerHandlers[id]()) { if (!KillTimer(utilWindow, id)) logLastError(L"KillTimer()"); timerHandlers.erase(id);