MFC里边经常用到的:符号什么意思

MFC里面经常用到的::符号什么意思!
比如OnTimer里面最后面要加上一个 CDialog::OnTimer(nIDEvent);
我知道"::"表示表示“域操作符” ,CDialog::OnTimer(nIDEvent)表示CDialog中OnTImer()函数
可是在我OnTimer里面为什么要加上这条语句?

------解决方案--------------------
OnTimer是在CDialog类的基类CWnd中定义的一个消息响应函数
如果在CDialog中重新定义CDialog::OnTimer(nIDEvent);
那就会覆盖基类的OnTimer函数
也就是说在派生类中定义了OnTimer,那样基类的OnTimer中有
一些默认的过程就不会被执行了,因为我们不知道基类的OnTimer
中都做了什么工作,以及这些工作对程序后续运行所造成的影响
我们就要显示的调用基类的成员函数。实际上OnTimer里面可能是
空的,因为我一直都是把他注释掉的。
------解决方案--------------------
调用父类的函数实现。然后再进行自己的处理
------解决方案--------------------
定时器的原型是:
WINUSERAPI UINT WINAPI SetTimer ( HWND hWnd , UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);
hWnd 是欲设置定时器的窗体句柄。定时时间到时,系统会向该窗体发送WM_TIMER消息。
nIDEvent 定时器标识符。在一个窗体内可以使用多个定时器,不同的定时器根据nIDEvent来区分。
uElapse 定时时间,单位是毫秒。
lpTimerFunc 定时器的回调函数。如果该值为NULL,定时时间到时,定时器发送的消息WM_TIMER由窗体映像该消息的函数处理;否则由回调函数处理,说白一点,回调函数就是取代OnTimer的处理函数。

通常,我们在使用定时器时,只用到三个参数,即
UINT CWnd::SetTimer( 
UINT nIDEvent, 
UINT nElapse, 
void (CALLBACK EXPORT* lpfnTimer)( 
HWND, UINT, UINT, DWORD) ); 
是MFC对API的封装
由此可见,CWnd::SetTimer只是将API函数SetTimer的第一个参数设置成它自己的句柄而已。


你自己的对话框类添加OnTimer会覆盖掉基类CDialog::OnTimer,此时你在对话框里直接使用的就是自己的对话框类的OnTimer,比如下面。
C/C++ code

void CTestDlg::OnTimer(UINT nIDEvent) 
{
       static int nTimer=0;
       CString strTmp="";
       strTmp.Format("Timer: %d",nTimer++);
       CWnd *pWnd=GetDlgItem(IDC_STATIC_TIME);
       pWnd->SetWindowText(strTmp);   将Lable中设置新值,表明定时器已经工作。
       CDialog::OnTimer(nIDEvent);
}

------解决方案--------------------
简单的说,就是microsoft帮你做一些善后工作。你也可以看看这个函数的实现,就知道为什么了。