我在曹洋的《Delphi 7 经典问题解析》中看到一个例程:用回调函数猎取所有运行窗体的标题,fun(h:hwnd;p:pointer):boolean;stdcall;
s:string;
begin
setlength(s,100);
getwindowtext(h,s,100);
listbox1.items.add(s);
end;然后在一个按钮的onclick事件中添加:
enumwindows(&fun,0); 大概是这样的,我想知道上面的那个函数中的返回值,返回给谁,有什么意义?
还有fun中的h,p两个参数的值从哪来?
谁解释一下!有分……
s:string;
begin
setlength(s,100);
getwindowtext(h,s,100);
listbox1.items.add(s);
end;然后在一个按钮的onclick事件中添加:
enumwindows(&fun,0); 大概是这样的,我想知道上面的那个函数中的返回值,返回给谁,有什么意义?
还有fun中的h,p两个参数的值从哪来?
谁解释一下!有分……
还有fun中的h,p两个参数的值从哪来?1. 回调函数不是你调用的 而是系统调用的 你只要指定即可
2. 返回值 返回给EnumWindows这个函数呀 它需要对其进行判断
3. fun中的h, p参数的值 自然是EnumWindows提供的,它调用的 自然是它赋值。。
这个被自己程序调用的函数反过来调用的函数就是回调函数。
在enumwindows中,每次调用回调函数时,都会将枚举到的窗口和一个自定义值作为参数传递到回调函数,这个是enumwindows函数约定的,你只要按照这个约定实现自己的回调函数就可以了.
TFun = function(H: HWND): Boolean;function Fun(H: HWND): Boolean; //定义了一个回调函数,作用是把H的显示在Form的Caption上
begin
Result := H > 0;
if Assigned(Form1) then Form1.Caption := IntToStr(H);
end;procedure CallProc(P: Pointer; X: Integer); //调用回调函数的函数
var
I: Integer;
F: TFun;
begin
I := X * 2;
F := TFun(P);
if F(I) then//相当于调用了 Fun(I) 函数, 返回的值给CallProc本身用
ShowMessage('True');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
//将Fun作为回调函数,目的是为了将 CallProc 内部变量I显示在Form的Caption上
CallProc(@Fun, 0);
end;
//------------------------------------------------------------------
//enumwindows就相当于CallProc,通过回调函数,
//可以将 enumwindows 函数内部的值取出来,
//而且enumwindows每找到一个窗体就执行下回调函数Fun,
//并把找到窗体的handle给了Fun的参数H,
//再通过Fun找到 窗体的标题 显示在 listbox1上