本函数是在状态条上显示当前时间。
void CMainFrame::SetStatusTime()
{
SYSTEMTIME RTime;
CString str;
GetSystemTime(&RTime);
str.Format("%d:% d:% ",RTime.wHour+8,RTime.wMinute,RTime.wSecond); m_wndStatusBar.SetPaneText(2,str,TRUE);
} 在CMainFrame下的OnTimer事件下调用SetStausTime函数,程序没有任何问题,可是在多媒体定时器函数中(很明显是一个全局函数),调用的时候程序出现错误,情况很是不明了。
付定时器函数(本函数没5毫秒执行一次,到了一秒后调用上面的函数)
void PASCAL OneMilliSecondProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;
dfMinus=(double)QPart2-QPart1;
dfTim=dfMinus/dfFreq;
dfTim=dfTim*1000;
if (dfTim>10)
{
last_stamp+=(int)dfTim;
itimer+=(int)dfTim;
}
else
{
last_stamp+=10;
itimer+=10;
}
if(itimer>1000)
{
itimer=0;
}
QPart1=QPart2;
}}
void CMainFrame::SetStatusTime()
{
SYSTEMTIME RTime;
CString str;
GetSystemTime(&RTime);
str.Format("%d:% d:% ",RTime.wHour+8,RTime.wMinute,RTime.wSecond); m_wndStatusBar.SetPaneText(2,str,TRUE);
} 在CMainFrame下的OnTimer事件下调用SetStausTime函数,程序没有任何问题,可是在多媒体定时器函数中(很明显是一个全局函数),调用的时候程序出现错误,情况很是不明了。
付定时器函数(本函数没5毫秒执行一次,到了一秒后调用上面的函数)
void PASCAL OneMilliSecondProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;
dfMinus=(double)QPart2-QPart1;
dfTim=dfMinus/dfFreq;
dfTim=dfTim*1000;
if (dfTim>10)
{
last_stamp+=(int)dfTim;
itimer+=(int)dfTim;
}
else
{
last_stamp+=10;
itimer+=10;
}
if(itimer>1000)
{
itimer=0;
}
QPart1=QPart2;
}}
if(itimer>1000)
{
myMainFrame->SetStausTime()
}
因为是全局函数,所以要用指针。理论上来讲,精度可以精确到1毫秒,但我更新状态的时候是1秒钟更新
因为我调用myMainFrame其他的函数就可以
在OnCreate函数里这样说明
myMainFrame=this;
刚才我说的调用其他函数可以,比如CFormView上某个控件的属性设置