《我的天空》英文版:回调函数?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 09:18:30
有网友告诉我这样一个使用回调函数的例子:
// 添加一个回调函数
BOOL CALLBACK EnumWndProc( HWND hwnd, LPARAM lParam )
{
// lParam == 0
static char str[1024];
::GetWindowText( hwnd , str , 1024 );
TRACE( str );
TRACE( "\r\n" );
return TRUE;
}

// 然后在程序里,执行下面的语句,实现输出所有窗口名.
EnumWindows( EnumWndProc , 0 );

不明白的问题:
回调函数是由应用程序定义的事件触发,由系统来调用执行的。但上例中:
// 然后在程序里,执行下面的语句,实现输出所有窗口名. EnumWindows( EnumWndProc , 0 );
不是写着由应用程序调用吗?

触发事件的定义在什么地方做呢?
flintgp:
谢谢你的回复。但我还是不明白,真正的触发是系统触发的,但系统应该按照我的意图来触发调用回调函数呀?我怎样把我的意图(在什么条件下调用回调函数)传达给系统呢?我是想:自己定义一个回调函数,让系统按我的意图来触发调用这个回调函数。

EnumWindows是枚举窗口
但是返回值返回未知数量的句柄和参数很麻烦
所以才需要回调
当你调用EnumWindows时
系统就会把所有的窗口通过回调函数通知你了

如果你想自己定义回调
可以使用SetWindowLong来实现子类化
这样你就可以自己控制了

EnumWindows只是定义了系统回调哪个函数(在这里就是EnumWndProc),但并不触发回调函数,真正触发是系统触发的,不知道这么写你能不能明白。