+// ----------------------------------------------------------------------------
+// private functions
+// ----------------------------------------------------------------------------
+
+void wxProcessTimer(
+  wxTimer&                          rTimer
+)
+{
+    //
+    // Avoid to process spurious timer events
+    //
+    if (rTimer.m_ulId == 0L)
+        return;
+
+    if (rTimer.IsOneShot())
+        rTimer.Stop();
+
+    rTimer.Notify();
+}
+
+ULONG wxTimerProc(
+  HWND                              WXUNUSED(hwnd)
+, ULONG
+, int                               nIdTimer
+, ULONG
+)
+{
+    wxNode*                         pNode = wxTimerList.Find((ULONG)nIdTimer);
+
+    wxCHECK_MSG(pNode, 0, wxT("bogus timer id in wxTimerProc") );
+
+    wxProcessTimer(*(wxTimer *)pNode->Data());
+    return 0;
+}