我在曹洋的《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两个参数的值从哪来?
谁解释一下!有分……

解决方案 »

  1.   

    大概是这样的,我想知道上面的那个函数中的返回值,返回给谁,有什么意义?
    还有fun中的h,p两个参数的值从哪来?1. 回调函数不是你调用的 而是系统调用的 你只要指定即可
    2. 返回值 返回给EnumWindows这个函数呀 它需要对其进行判断
    3. fun中的h, p参数的值 自然是EnumWindows提供的,它调用的 自然是它赋值。。
      

  2.   

    enumwindows(&fun,0); enumwindows是系统函数,在你调用这个函数后,每当enumwindows枚举到一个窗口后,都会调用传递给自己的第一个参数指向的函数(就是fun函数,因为你把fun函数的地址传递到了enumwindows函数)。
    这个被自己程序调用的函数反过来调用的函数就是回调函数。
    在enumwindows中,每次调用回调函数时,都会将枚举到的窗口和一个自定义值作为参数传递到回调函数,这个是enumwindows函数约定的,你只要按照这个约定实现自己的回调函数就可以了.
      

  3.   

    写个简单的例子,希望能帮助理解type
      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上
      

  4.   

    CallProc(@Fun, 0);运行的结果是窗体的标题为0?回答后马上结贴!
      

  5.   

    谢谢: firef(火狐)  结帐了!