回调函数是什么 谢谢

时间:2013.08.14 发布人:xiellldd

回调函数是什么 谢谢

已解决问题

谷歌xiellldd用户在2013.08.14提交了关于“舌尖上的中国回调函数是什么 谢谢”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-11-10T16:28:06。h**RESULTCALLBACKh**elloworldProcess(h**WNDhWnd,UINTMessage,WPARAMWParam,LPARAMLParam)
{
switch(Message)
{caseWM_PAINT:
{h**DCdc=BeginPaint(hWnd);
SetColor(dc,CL_RED);
TextOut(dc,50,50,"h**elloWorld!");
EndPaint(hWnd);
}
return0;
}
returnDefWindowProc(hWnd,Message,WParam,LParam);//??????
}
voidRegisterh**elloworld(void)//手册P20
{TWNDCLASSwc;
memset(&wc,0,sizeof(wc));
wc.clForeground=CL_**NTEXT;
wc.clBackground=CL_**NFACE;
wc.lpfnWndProc=h**elloworldProcess;//这里函数名是不是就是函数的指针??
wc.lpszClassName="h**elloworld";
RegisterClass(&wc);
}

请问定义了回调函数h**elloworldProcess,
问题1为什么必须要这句呢returnDefWindowProc(hWnd,Message,WParam,LParam);??加这一句的作用是干啥?
问题2我的c基础不是非常好,再问一下函数名是不是就是该函数的地址?可以直接把一个函数名赋给一个函数指针吗?不需要加取地址符(&)吗?
关键是第1个问题谢谢大家希望给些例子或易懂语言必追分感谢。希望大家能够帮助她。

详细问题描述及疑问:h**RESULTCALLBACKh**elloworldProcess(h**WNDhWnd,UINTMessage,WPARAMWParam,LPARAMLParam)
{
switch(Message)
{caseWM_PAINT:
{h**DCdc=BeginPaint(hWnd);
SetColor(dc,CL_RED);
TextOut(dc,50,50,"h**elloWorld!");
EndPaint(hWnd);
}
return0;
}
returnDefWindowProc(hWnd,Message,WParam,LParam);//??????
}
voidRegisterh**elloworld(void)//手册P20
{TWNDCLASSwc;
memset(&wc,0,sizeof(wc));
wc.clForeground=CL_**NTEXT;
wc.clBackground=CL_**NFACE;
wc.lpfnWndProc=h**elloworldProcess;//这里函数名是不是就是函数的指针??
wc.lpszClassName="h**elloworld";
RegisterClass(&wc);
}

请问定义了回调函数h**elloworldProcess,
问题1为什么必须要这句呢returnDefWindowProc(hWnd,Message,WParam,LParam);??加这一句的作用是干啥?
问题2我的c基础不是非常好,再问一下函数名是不是就是该函数的地址?可以直接把一个函数名赋给一个函数指针吗?不需要加取地址符(&)吗?
关键是第1个问题谢谢大家希望给些例子或易懂语言必追分感谢。期待您的答案,感谢你,我会记得你对我的好的 !

希望以下的回答,能够帮助你。

第1个回答

用户名:oykidss  

1、加上这一句是让系统处理你不处理的**,如果不加这一句的话,除非你的程序处理了所有消息,不然很有可能运行不正常
2、函数名就是函数的地址,就是函数的指针,不需要在进行取地址操作

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该来自函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对商该事件或条件进行响应