本人以前接触VC很少,但现在要做个项目。其中用到多媒体定时器,我用的是全局回调函数,但我发现在全局回调函数中只能调用视图类中的静态成员函数,所以必须将需要处理的程序放在视图类中定义的静态成员函数中,但由由于静态成员函数只能访问静态变量,所以我采取了静态指针的办法,并将静态指针以参数的形式传递给此静态成员函数,想要借此指针访问视图类中的普通变量,可我发现这种方法可以访问视图类中的普通成员函数,可只要添加对普通变量的操作就会出错,不知各位高手可有任何指点?或者可以采取其它办法在静态成员函数中访问类的普通变量?感谢!
主要程序如下:
1、多媒体定时器的设置:
int CAsdfadView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
wTimerRes = 2000; //给时间间隔变量赋值
wAccuracy =1;
TIMECAPS tc; //定时器分辨率的结构
if (timeGetDevCaps(&tc,sizeof(TIMECAPS)) == TIMERR_NOERROR)
{
//分辨率的值不能超出系统的取值范围
wAccuracy=min(max(tc.wPeriodMin,wAccuracy),tc.wPeriodMax);
//调用timeBeginPeriod函数设置定时器的分辨率
timeBeginPeriod(wAccuracy);
}
TimerID = timeSetEvent(wTimerRes,wAccuracy,
(LPTIMECALLBACK)MyTimerProc,
(DWORD)this,TIME_PERIODIC);
return 0;
}
2、全局回调函数、全局静态指针及视图类中的静态成员函数的声明:
void CALLBACK MyTimerProc(UINT wTimerID, UINT nMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
static CAsdfadView* pthis; // 全局函数和指针均是在类之外声明的
static void CAsdfadView::MyTime(CAsdfadView* mythis);
3、全局回调函数及静态成员函数的定义:
void CALLBACK MyTimerProc(UINT wTimerID, UINT nMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
CAsdfadView::MyTime(pthis);
}
void CAsdfadView::MyTime(CAsdfadView* mythis) //注意:static成员函数只能访问类的static成员!
{
AfxMessageBox("Time",MB_ICONINFORMATION);
//在这里可以采用参数形式传递的静态指针来访问普通成员函数,
//但只要添加对普通变量的处理就会出错!?
}