资源描述:
《vfp调用windows api函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、VFP调用WindowsAPI函数正式开始:我想你可能经常看过如下这种语句,我不得不在这里重复地说一遍DECLAREINTEGERSetWindowTextINuser32;INTEGERhWnd,;STRINGlpStringHwnd=thisform.hwndcustomtext=space(250)lnlen=len(customtext)SetWindowText(Hwnd,customtext,lnlen)第一个语句就是一般的api定义,意思就是注册一个user32.dll动态库中的函数SetWindowText,接受参数 integer类型hwnd,string类型h的sWind
2、owText参数,,返回值为intger,这是参数按值传递的一部分,第三个语句就是调用注册的api函数了,看起来和我们用普通的foxpro函数并无区别,只是多了一步注册的步骤.我们再看看另一种定义,按引用传递的的方式,看到什么不同了吗?第一个语句就是一般的api定义,意思就是注册一个user32.dll动态库中的函数SetWindowText,接受的参数是integer类型hwnd,string类型h的sWindowText,INTEGER类型的cch,返回值为intger类型DECLAREINTEGERGetWindowTextINuser32;INTEGERhwnd,;STRING@lp
3、String,;INTEGERcchHwnd=thisform.hwndHwnd=thisform.hwndStext=space(250)lnlen=250SetWindowText(Hwnd,@customtext,lnlen)没错,多了一个伊妹儿的符号:@,注意调用的时候也得加入该符号,此符号的意思是说参数sWidowText是按引用传递的,为什么要这么用呢,原因是我们要用函数GetwindowText的得到一个窗体(Form)标题.GetwindowText的职责就是将我们要的值填入sWidowText中,如果调用成功你就会看到sWidowText的值已经改变.此处你要明白所谓的按引
4、用传递有如C中的指针,我们只是该内容的地址为参数传给GetwindowText,它直接在地址指向的内存单元上修改数据.所以我们才可能看到sWidowText值在调用GetwindowText()函数就发生了改变。以上两种就是最基本的windowsapi定义了.对于简单的函数一般都可以这样解决.也许此时你有疑问,你是在哪里知道这些函数的详细信息的?很好很好,有问题是好的.那么请你打开msdn,什么?你不知道MSDN,我倒..^_^简单而说msdn是涵盖了大量内容的帮助文档,大部分的api在其中都有讲述,有些还有小实例.在这里并不要求你要记住所有windows的api函数,这不可行也不可能,只要
5、知道有它的存在,大概的功能,用时查msdn就可以,更重要的是知道怎么去把它纠出来,然后理解它.如果你现在没有安装MSDN,我强烈建议你马上下载一个msdn2005.该帮助文档大部分都是E文,你得有点心理准备.键入SetWindowText查询,你就会看到所有相关的函数原型,参数及返回值的解释.此时查询后你看到一些莫名其妙的返回值类型和参数类型.如:DWORD,LPTSTR为什么不是integer,string呢?请听我说,由于windowapi是基于c的,而C中有一种叫宏定义的东西,而DWORD,LPTSTR就是一种宏罢了,宏定义时一般以大写出现,只不过是类型的另一种叫法而已再查询DWORD
6、,LPTSTR你就可以看到它们的真面目,DWORD<=>无符号的32位的整型,LPTSTR<=>字符串指针注:<=>符号在此代表等价的意思原来DWORD与integer指的同一种数据类型.这就好比有一天在大街上你可能看到一个漂亮的女孩,很是心动,你可能称她为美女或者天使,但最终美女或天使指向的都是这个女孩,不过就是这个女孩的代名词而已.下面我以C为例说明以不同类型来读取相同内存区域后会得到怎么样的内容,我希望你以内存的角度来看。这些原理是相通的,和语言无关,只是C来讲比较方便罢了,所以我选择它来让问题简单化.此步将有助于你理解怎么在foxpro处理含有结构参数的一些复杂API函数,虽然这一部
7、分比较枯燥,但我还是希望你努力看下去.如果这道坎过了,下来也就容易许多先来看看简单的变量声明:假设你的系统上int类型占4个字节,inticount=0x11ff;//那么该语句将为你开辟一个四字节的内存空间,假设0x11ff存入内存单元:0x000420000之处,那么内存中是这样的内存地址内存单元的内容0x00420000:0xff0x00420001:0x110x00420002:00x00420003