delphi 句柄和回调函数

1.我刚学语言,句柄我明白是什么意思了,但用起来还有费劲,
比如格式化磁盘函数:function formatdrive
(hwnd:Hwnd;drive,fomatid,options:word):longint stdcall,
这里的Hwnd指的是什么啊,他只说窗口句柄,,
还有有一个函数
function GetWindowRect(hwnd:HWND;var lpRect:TRect):Bool;stdcall;
也有一个hwnd,也说是一个窗口句柄,这个hwnd和上一个hwnd是指一个吗,
不是那又怎么一说呢,请大哥们解译一下,
2.stdcall是什么意思,查了,没看到懂
3.

unit frm_EnumList;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan, ExtCtrls;
type
EnumWindowsProc = function(hand:HWND;lparam:Lparam):integer;stdcall;

type
TFrmListProcess = class(TForm)
BtnList: TButton;
BtnClose: TButton;
GBxList: TGroupBox;
LBxList: TListBox;
Bevel1: TBevel;
XPManifest1: TXPManifest;
procedure BtnListClick(Sender: TObject);
procedure BtnCloseClick(Sender: TObject);
private
procedure EmumSystemProcess(list:TStrings;Epro:EnumWindowsProc);
{ Private declarations }
public
{ Public declarations }
end;

var
FrmListProcess: TFrmListProcess;

function Mynum(hand:HWND;lparam:LPARAM):integer;stdcall;
implementation

{$R *.dfm}
function Mynum(hand:HWND;lparam:LPARAM):integer;stdcall;
var
buff:Array[0..255] of char;
begin
result:=0;
if Hand<>0 then
begin
getwindowtext(hand,buff,255);
TStrings(Lparam).Add('任务名:'+buff+' ID:'+inttostr(Hand));
result:=hand;
end;
end;

procedure TFrmListProcess.EmumSystemProcess(list:TStrings;Epro:EnumWindowsProc);
begin
EnumWindows(@Epro,integer(list));
end;

procedure TFrmListProcess.BtnListClick(Sender: TObject);
begin
LbxList.Clear;
EmumSystemProcess(LbxList.Items,Mynum);
end;

procedure TFrmListProcess.BtnCloseClick(Sender: TObject);
begin
close;
end;

end.

这段代码是没有问题的,可以运行,但是一点还是不明白,,
EmumSystemProcess(LbxList.Items,Mynum);Mynum后面应该放参数啊,可原程序没有放参数,也可以运行,这是怎么回事。以上三个问题,帮帮小弟啊,刚学了,,,
给大哥们50分,小弟分不多哦,

小弟蒙了,到底是怎么回事

你说刚学语言,可是问的都是些挺难的问题啊。
1 formatdrive(hwnd:Hwnd;drive,fomatid,options:word)
hwnd=被显示对话框的父窗口
drive=被格式化的驱动器ID(0=A,1=B,2=C,等)
fmtID=应该总是设置为-1
Options=格式化的类型

就是说当你要格式化一个磁盘的时候,系统要问你是否确实这样做,这时就要弹出一个提示对话框,但是对话框需要消息循环啊,获得焦点啊等等很多的东西支撑,所以这个对话框需要一个父窗口作为依靠,你可以把他设为你的程序的主窗口的句柄就可以了。

GetWindowRect(hwnd:HWND;var lpRect:TRect)
获得一个窗体的外轮廓的大小尺寸,既然要得到尺寸,当然首先得告诉程序,你想获得那个窗口,就得把那个窗口的句柄传给它。

这个hwnd和上一个hwnd是指一个吗?hwnd是一个数据类型,是一个无符号的32位整数,就是窗体的句柄,你可以把任何窗体的句柄作为参数传入函数中,这样程序就会用这个窗体为他服务或者返回窗体的参数。

2.stdcall是什么意思?是一种函数的调用方式声明,简单的说,用delphi写的函数跟用其他语言写的函数调用方式不一样(例如主要以C编写的系统API函数),主要是参数的输入顺序是不一样的,还有调用完毕后清理内存垃圾的问题,如果用delphi语言去调用一个系统的函数,而不告诉DELPHI这个函数得按stdcall的调用方式,那个调用就会出错。由于你上面所写的两个函数是系统API函数或者从API演变来的,所以必须加上这个标记才行。

3,EmumSystemProcess(LbxList.Items,Mynum);Mynum后面应该放参数啊
在delphi里面,函数的名称也可以作为是一个变量,这个变量是个指针,指向函数的开始位置,在回调函数中,一个特殊的地方就是函数的变量不能直接输入,而得靠EnumWindows(@Epro,integer(list));这样输入,@Epro是回调函数的地址,integer(list)是回调函数的变量,然后由EnumWindows把这个函数推给操作系统作历遍运行。

不知说的懂不懂,关键是你问的这些都太深了,得有了一定基础以后才明白。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网