MFC OnTimer() 问题

HICONm_hIcon[3];分别加载相应的ico图片;在OnCreat()函数中加入定时器;{SetTimer(1,1000,NULL);}voidCMainFram... HICON m_hIcon[3];
分别加载相应的ico图片;
在OnCreat()函数中加入定时器;
{
SetTimer(1,1000,NULL);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
static int index=1;

SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(AfxGetInstanceHandle(),m_hIcon[index]));
index=++index%3;
CFrameWnd::OnTimer(nIDEvent);

}
我想知道,在OnTimer()函数从上到下执行一次以后又调用哪个函数 ?
还有就是,SetTimer()的第三个参数—回调函数,是指OnTimer()执行结束以后要调用的函数吗?

谢谢 !
展开
 我来答
百度网友0ee9ace0b
2013-08-09 · TA获得超过287个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:184万
展开全部

OnTimer()其实是用来响应WM_TIMER消息的,其实OnTimer()就是一个回调函数,不过是系统默认的,当用户使用SetTimer()函数设定一个定时器的时候,只要是第三个参数为NULL,则系统就会调用默认的回调函数OnTimer()。

SetTimer(1,1000,NULL);

这一句就是设定一个定时器,每1000毫秒发送一次WM_TIMER消息,每次都会执行一个OnTimer()。

下面的代码演示了使用自定义的回调函数:

// 自定义回调函数
void CALLBACK TimerP(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime){
    cout<<"定时器执行"<<endl ;
}

int main(){
int iId = SetTimer(NULL,0,500,TimerP) ;
MSG msg ;
// 消息循环,从消息队列中获取消息,响应WM_TIMER消息。
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message = WM_TIMER){
DispatchMessage(&msg) ;
}
}
KillTimer(NULL,iId) ;
return 0 ;
}
追问
还想问个问题。怎么用LoadImage()函数替换LoadIcon()函数;
如SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDC_ERROR));
用LadImage()该怎么写呢? 谢谢 !
追答

不知道你想实现什么功能?如果是装载图标的话,使用如下语句即可:

m_hIcon = (HICON)LoadImage(AfxGetInstanceHandle(),_T("D:/1.ico"),IMAGE_ICON,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE) ; // 读取D盘下的1.ico文件
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
Magic_旭
2013-08-09 · 超过41用户采纳过TA的回答
知道答主
回答量:287
采纳率:100%
帮助的人:119万
展开全部
回调函数是指专门用来执行OnTimer的函数,如果没有指定这个回调函数,那么由窗口响应WM_TIMER消息
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式