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()执行结束以后要调用的函数吗?
谢谢 ! 展开
分别加载相应的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()执行结束以后要调用的函数吗?
谢谢 ! 展开
2个回答
展开全部
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); // 设置小图标
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询