Re: How to update 'Edit Control' text from Timer Callback.
IdleBrain wrote:
Giovanni, thanks a lot for ur sample app. Your sample app works
perfect.
But, for some reason the OnTimer method in my project is still never
called.
Here is the code that I have been using:
void CxDlg::OnBnClickedOk()
{
CString strCurCaption;
GetDlgItem(IDOK)->GetWindowText(strCurCaption);
if(strCurCaption == "Start")
{
char c[] = "Stop";
CString strNewCaption(c);
GetDlgItem(IDOK)->SetWindowText(strNewCaption);
utmrTx = SetTimer (1, 1000, NULL);
}
else
{
char c[] = "Start";
CString strNewCaption(c);
GetDlgItem(IDOK)->SetWindowText(strNewCaption);
// Stop the timer
KillTimer(utmrTx);
}
}
A few things here to make your life easier. In CxDlg add a bool member.
It is considered bad form to use GetDlgItem in dialog members.
bool bTimerRunning;
and a control member
CButton cStartStopButton;
Add this with the wizard so the control gets subclassed.
In the resource view, right click the button and add variable.
Then:
void CxDlg::OnClickStartStop( )
{
if( bTimmerRunning )
{
KillTimer( utmrTx );
cStartStopButton.SetWindowText( _T("Start") );
}
else
{
utmrTx= SetTimer( 1, 1000, NULL );
cStartStopButton.SetWindowText( _T("Stop") );
}
bTimmerRunning= !bTimmerRunning;
}
CxDlg::CxDlg(...)
:bTimerRunning( false )
....
**
You may take this a step further and put the SetWindowText in a
'SetControls' member so it can be call from your on click and InitDialog.
**
void CxDlg::OnTimer(UINT nIDEvent)
{
//Do some stuff
//Restart the timer
CDialog::OnTimer(nIDEvent);
}
My guess is you don't have the message mapped:
BEGIN_MESSAGE_MAP( CxDlg, ... )
ON_WM_TIMER( )
....
Best, Dan.