wxApp development for WXPM

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4562 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
1999-11-15 04:50:09 +00:00
parent d45d30c868
commit 9ed0fac8a8
8 changed files with 434 additions and 598 deletions

View File

@@ -37,7 +37,7 @@
// ----------------------------------------------------------------------------
wxList wxTimerList(wxKEY_INTEGER);
UINT wxTimerProc(HWND hwnd, WORD, int idTimer, DWORD);
ULONG wxTimerProc(HWND hwnd, ULONG, int nIdTimer, ULONG);
// ----------------------------------------------------------------------------
// macros
@@ -49,9 +49,7 @@ IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
wxTimer::wxTimer()
{
milli = 0 ;
id = 0;
oneShot = FALSE;
m_ulId = 0;
}
wxTimer::~wxTimer()
@@ -61,74 +59,84 @@ wxTimer::~wxTimer()
wxTimerList.DeleteObject(this);
}
bool wxTimer::Start(int milliseconds,bool mode)
bool wxTimer::Start(
int nMilliseconds
, bool bOneShot
)
{
oneShot = mode;
if (milliseconds < 0)
milliseconds = lastMilli;
(void)wxTimerBase::Start( nMilliseconds
,bOneShot
);
wxCHECK_MSG( milliseconds > 0, FALSE, wxT("invalid value for timer timeour") );
lastMilli = milli = milliseconds;
wxCHECK_MSG( m_milli > 0L, FALSE, wxT("invalid value for timer") );
wxTimerList.DeleteObject(this);
// TODO:
/*
TIMERPROC wxTimerProcInst = (TIMERPROC)
MakeProcInstance((FARPROC)wxTimerProc, wxGetInstance());
id = SetTimer(NULL, (UINT)(id ? id : 1),
(UINT)milliseconds, wxTimerProcInst);
*/
if (id > 0)
//
// Create a windowless timer
//
m_ulId = ::WinStartTimer( m_Hab
,NULL
,(m_ulId ? m_ulId : 1L)
,(ULONG)nMilliseconds
);
if (m_ulId > 0L)
{
wxTimerList.Append(id, this);
return TRUE;
wxTimerList.Append( m_ulId
,this
);
return(TRUE);
}
else
{
wxLogSysError(_("Couldn't create a timer"));
return FALSE;
return(FALSE);
}
}
void wxTimer::Stop()
{
if ( id )
if ( m_ulId )
{
// KillTimer(NULL, (UINT)id);
::WinStopTimer(m_Hab, NULL, m_ulId);
wxTimerList.DeleteObject(this);
}
id = 0;
milli = 0;
m_ulId = 0L;
}
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
void wxProcessTimer(wxTimer& timer)
void wxProcessTimer(
wxTimer& rTimer
)
{
//
// Avoid to process spurious timer events
if ( timer.id == 0)
//
if (rTimer.m_ulId == 0L)
return;
if ( timer.oneShot )
timer.Stop();
if (rTimer.IsOneShot())
rTimer.Stop();
timer.Notify();
rTimer.Notify();
}
UINT wxTimerProc(HWND WXUNUSED(hwnd), WORD, int idTimer, DWORD)
ULONG wxTimerProc(
HWND WXUNUSED(hwnd)
, ULONG
, int nIdTimer
, ULONG
)
{
wxNode *node = wxTimerList.Find((long)idTimer);
wxNode* pNode = wxTimerList.Find((ULONG)nIdTimer);
wxCHECK_MSG( node, 0, wxT("bogus timer id in wxTimerProc") );
wxProcessTimer(*(wxTimer *)node->Data());
wxCHECK_MSG(pNode, 0, wxT("bogus timer id in wxTimerProc") );
wxProcessTimer(*(wxTimer *)pNode->Data());
return 0;
}