#endif
#include "wx/msw/private.h"
+#include "wx/msw/private/hiddenwin.h"
// ----------------------------------------------------------------------------
// private globals
LRESULT APIENTRY _EXPORT wxTimerWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
-// implemented in utils.cpp
-extern "C" WXDLLIMPEXP_BASE HWND
-wxCreateHiddenWindow(LPCTSTR *pclassname, LPCTSTR classname, WNDPROC wndproc);
-
-
// ----------------------------------------------------------------------------
// wxTimerHiddenWindowModule: used to manage the hidden window used for
// catching timer messages (we need a module to ensure that the window is
// wxMSWTimerImpl class
// ----------------------------------------------------------------------------
-wxMSWTimerImpl::wxMSWTimerImpl(wxTimer *timer)
-:wxTimerImpl(timer)
-{
- m_id = GetNewTimerId(this);
-}
-
-wxMSWTimerImpl::~wxMSWTimerImpl()
-{
- TimerMap().erase(m_id);
-}
-
bool wxMSWTimerImpl::Start(int milliseconds, bool oneShot)
{
if ( !wxTimerImpl::Start(milliseconds, oneShot) )
return false;
+ m_id = GetNewTimerId(this);
// SetTimer() normally returns just idTimer but this might change in the
// future so use its return value to be safe
UINT_PTR ret = ::SetTimer
void wxMSWTimerImpl::Stop()
{
::KillTimer(wxTimerHiddenWindowModule::GetHWND(), m_id);
+ TimerMap().erase(m_id);
+ m_id = 0;
}
// ----------------------------------------------------------------------------
{
wxTimerMap::iterator node = TimerMap().find(wParam);
- wxCHECK_MSG( node != TimerMap().end(), 0, wxT("bogus timer id in wxTimerProc") );
+ if ( node != TimerMap().end() )
+ {
+ wxProcessTimer(*(node->second));
- wxProcessTimer(*(node->second));
- }
- else
- {
- return ::DefWindowProc(hWnd, message, wParam, lParam);
+ return 0;
+ }
+ //else: Unknown timer, probably one of our timers that had fired just
+ // before being removed from the timers map by Stop().
}
- return 0;
+
+ return ::DefWindowProc(hWnd, message, wParam, lParam);
}
// ----------------------------------------------------------------------------