关于CALLBACK的问题 我对CALLBACK的理解不是很深,CALLBACK有什么特别的作用?为什么要用CALLBACK?在什么情况下用CALLBACK? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体参见 windows 程序设计 5th CALLBACK只是一个宏定义,CALLBACK规定了函数的调用方式(其实就是函数参数的入/出栈负责者),而“CALLBACK”这个调用方式恰恰就是windows所要求的方式。简单来讲就是因为你的函数需要被windows所调用,所以就必须遵循windows它老人家对函数规定的“游戏规则”咯。 一个回调函数本质上是一个事件处理器,她由应用程序来实现,由系统来调用。微软windows应用程序代表性的 实现了多个回调函数,每一个都为一套特别的事件设计。当一个事件发生时,系统通过调用回调函数来通知这个应用程序。通常,回调函数有一个参数列表,系统可以使用这些参数来传递一些事件的细节信息给应用程序。最常见的回调函数的例子是 windows procedure。 这个函数被系统用来传递windows消息给拥有这个窗口的应用程序。个回调函数参考基本上是一个描述如何实现函数的模板,不是一个通常的 API参考。回调函数参考能提供如下信息1。函数被如何使用2。函数的语法3。包含所有参数的消息的解释4。可能返回值的解释你可以申明这个函数为一个CALLBACK或者WINAPI类型,或者可以被接受的类型你可以使用任何你喜欢的函数名字,文档中使用的名字只是一个特殊的回调函数的简单的便利的标志按照参考中的描述实现这个函数。实现的细节将取决于特定的函数和你应用程序的需求。可以看看如何实现各种回调函数的一些实例的示例代码CALLBACK函数一般是如下形式,他可以传递参数下面就是一个CALLBACK函数LRESULT CALLBACK SEnumChild(HWND hwnd,LPVOID Info) { char szClassName[256]; ZeroMemory(szClassName,256); GetClassName(hwnd, szClassName, 256); if (stricmp("RICHEDIT", szClassName) == 0) { ChildHad[1]=hwnd; } return true;} 楼上兄弟说得好,跟书本上的一样。其实搂住定义一个CALLBACK函数,然后在"CALLBACK"上点击鼠标右键,然后在弹出菜单里面选择"Goto Definition of CALLBACK",然后看看那个头文件中对CALLBACK宏的定义就一定会恍然大悟的,只要你还记得__stdcall或者pascal是什么意思。:) CALLBACK是声明一种回调函数,这个函数有程序自动来调用,不需要你调用。 点击正在执行的进度条时,进度条停滞 Richedit 拉动滚动条图片闪烁问题 ShowWindow错误,GetLastError返回400,怎么回事? 关于进度条控件 手写HelloWin小程序链接错误求助 多行编辑框用它的GetWindowTextLength()的时候回车为什么总要作两个字符算啊? 求个函数...急 关于传递给线程函数的参数 怎样编程来抓CD音轨,转成wav文件? 一个MFC的对于大神来说超级简单的问题 在 Windows XP 中自定义纸张大小 CComboBox中AddString的用法
微软windows应用程序代表性的 实现了多个回调函数,每一个都为一套特别的事件设计。
当一个事件发生时,系统通过调用回调函数来通知这个应用程序。通常,回调函数有一个参数列表,系统可以使用这些参数来传递一些事件的细节信息给应用程序。
最常见的回调函数的例子是 windows procedure。 这个函数被系统用来传递windows消息给拥有这个窗口的应用程序。
个回调函数参考基本上是一个描述如何实现函数的模板,不是一个通常的 API参考。
回调函数参考能提供如下信息
1。函数被如何使用
2。函数的语法
3。包含所有参数的消息的解释
4。可能返回值的解释你可以申明这个函数为一个CALLBACK或者WINAPI类型,或者可以被接受的类型
你可以使用任何你喜欢的函数名字,文档中使用的名字只是一个特殊的回调函数的简单的便利的标志按照参考中的描述实现这个函数。实现的细节将取决于特定的函数和你应用程序的需求。
可以看看如何实现各种回调函数的一些实例的示例代码
CALLBACK函数一般是如下形式,他可以传递参数
下面就是一个CALLBACK函数LRESULT CALLBACK SEnumChild(HWND hwnd,LPVOID Info)
{
char szClassName[256];
ZeroMemory(szClassName,256);
GetClassName(hwnd, szClassName, 256);
if (stricmp("RICHEDIT", szClassName) == 0)
{
ChildHad[1]=hwnd;
}
return true;
}
其实搂住定义一个CALLBACK函数,然后在"CALLBACK"上点击鼠标右键,然后在弹出菜单里面选择"Goto Definition of CALLBACK",然后看看那个头文件中对CALLBACK宏的定义就一定会恍然大悟的,只要你还记得__stdcall或者pascal是什么意思。:)