Win32API函数,它的第二个参数该如何封装

Win32API函数,它的第二个参数该如何封装,第1张

Win32 API即为Microsoft 32位平台的应用程序编程接口 API 是Application Programming Interface缩写。 是 *** 作系统留给程序员进行应用程序开发接口,说白了,就是一大堆的函数、结构、消息、宏及接口。 程序员可以直接拿来就用,不用开发一个程序,工作从头开始做起。 具体相关,可以在网上搜索一下。 MSDN, 是程序员开发文档总集。 帮助文档。 包含详细的API函数介绍,及使用示例。

什么是API

API(Advanced Programmers Interface,高级程序员接口)(注:API实际是指Application Programming Interface,应用程序编程接口;此处疑为原文错误,不过在VB中也可以这么说吧!)是一套用来控制Windows的各个部件(从桌面的外观到位一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数用户的每个动作都会引发一个或几个函数的运行以Windows告诉发生了什么

这在某种程度上很象Windows的天然代码其他的语言只是提供一种能自动而且更容易的访问API的方法VB在这方面作了很多工作它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法

这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows例如,Form1PrintVB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数

同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click)

API函数包含在Windows系统目录下的动态连接库文件中(如User32dll,GDI32dll,Shell32dll)

进入讨论组讨论。

API 声明

正如在"什么是API"中所说,API函数包含在位于系统目录下的DLL文件中你可以自己输入API函数的声明,但VB提供了一种更简单的方法,即使用API Text Viewer

要想在你的工程中声明API函数,只需运行API Text Viewer,打开Win32apitxt(或MDB如果你已经把它转换成了数据库的话,这样可以加快速度注:微软的这个文件有很多的不足,你可以试一下本站提供下载的api32txt),选择"声明",找到所需函数,点击"添加(Add)"并"复制(Copy)",然后粘贴(Paste)到你的工程里使用预定义的常量和类型也是同样的方法

你将会遇到一些问题:

假设你想在你的窗体模块中声明一个函数粘贴然后运行,VB会告诉你:编译错误Declare 语句不允许作为类或对象模块中的 Public 成员看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(如 Private Declare Function)--不要忘了,可是这将使该函数只在该窗体模块可用

在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数常量或其他的什么东西共用了一个名称由于绝大多数的函数(也可能是全部,我没有验证过)都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行

你可以通过查看VB的Declare语句帮助主题来获取有关Alias的详细说明

进入讨论组讨论。

消息(Messages)

好了,现在你已经知道什么是API函数了,但你也一定听说过消息(如果你还没有,你很快就会)并且想知道它是什么消息是Windows告诉你的程序发生了哪些事件或要求执行特定 *** 作的基本方法例如,当用户点击一个按钮,移动鼠标,或是向文本框中键入文字时,一条消息就会被发送给你的窗体

所有发送的消息都有四个参数--一个窗口句柄(hwnd),一个消息编号(msg)还有两个32位长度(Long)的参数

hwnd即要接受消息的一个窗口的句柄,msg即消息的标识符(编号)该标识符是指引发消息的动作类型(如移动鼠标),另外两个参数是该消息的附加参数(例如当鼠标移动时光标的当前位置)

但是,当消息发送给你时你为什么看不到呢--就象有人在偷你的信一样请先别恼火,让我告诉你

小偷其实是Visual Basic但它并没有偷走你的信,而是在阅读了之后挑出重要的以一种好的方式告诉你这种方式就是你代码中的事件(Event)

这样,当用户在你的窗体上移动鼠标时,Windows会发送一条WM_MOUSEMOVE消息给你的窗口,VB得到这条消息以及它的参数并运行你在事件MouseMove中的代码,同时VB会把这条消息的第二个32位数(它包含了x,y坐标,单位为像素(Pixel),每个位16位)转换为两个单精度数,单位为缇(Twip)

现在,如果你需要光标坐标的像素表示,然而VB已经把它转换成了缇,因此你需要重新把它转换为以像素为单位在这里,Windows给了你所需要的,但VB"好意地"进行了转换而使你不得不重新转换你可能会问--我难道不能自己接收消息吗答案是肯定的,你可以使用一种叫做子类处理(Subclass)的方法但你除非必须否则最好不要使用,因为这与VB的安全程序设计有一点点的违背(注:子类处理确实有很大的风险,但如果使用得当,是很有用处的不过有一点一定要注意,即千万不要使用VB的断点调试功能,这可能会导致VB崩溃!)

需要补充说明的是:你可以发送消息给你自己的窗口或其他的窗口,只需调用SendMessage或PostMessage(SendMessage会使接受到消息的窗口立刻处理消息,而PostMessage是把消息发送到一个称为消息队列的队列中去,等候处理(它将会在该消息处理完后返回,例如有些延迟))你必须制定接受消息的窗口的句柄,欲发送消息的编号(所有的消息的编号均为常量,你可以通过API Text Viewer查得)以及两个32位的参数

进入讨论组讨论。

api大全这儿有:http://downloadchinaitlabcom/system/files/7471html

C语言的函数 可以和Turbo C的函数做同一个理解,

Turbo C 是在DOS环境下运行的,是一个8位的C语言环境,

WIN32 API 顾名思义 是在32位的环境下运行的,

如此 Turbo C显然不能调用WIN32的API

如果你是初学者,想学习C语言。

强烈建议你先用Turbo C处理书本上一些例题。

然后用VC学习API

用VC理由如下:

1、WIN32 API属于微软,当然要用微软公司开发的VC。

2、网络上铺天盖地的电子书、视频都是关于VC的。

3、企业基本都在用windows *** 作系统

至于什么DEV C;WINNER C; BOLAND C++建议根本不要碰——浪费时间……

最后 祝你好运!

《MFC类库详解》,中文版 + 《新编win32API大全》

http://hibaiducom/ypxmaomao/blog/item/10f17cf4d55d7069dcc4741fhtml

函数功能:该函数创建一个具有扩展风格的重叠式窗口、d出式窗口或子窗口,其他与 CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindowEx。

函数原型:HWND CreateWindowEx(DWORD dwExStle,LPCTSTR IpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENUhMenu,HANDLE hlnstance,LPVOIDlpParam);

参数:

dwExStyle:指定窗口的扩展风格。该参数可以是下列值:

WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽文件。

WS_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上。

WS_EX_CLIENTEDGE:指定窗口有一个带阴影的边界。

WS_EX_CONTEXTHELP:在窗口的标题条包含一个问号标志。当用户点击了问号时,鼠标光标变为一个问号的指针、如果点击了一个子窗口,则子窗日接收到WM_HELP消息。子窗口应该将这个消息传递给父窗口过程,父窗口再通过HELP_WM_HELP命令调用WinHelp函数。这个Help应用程序显示一个包含子窗口帮助信息的d出式窗口。 WS_EX_CONTEXTHELP不能与WS_MAXIMIZEBOX和WS_MINIMIZEBOX同时使用。

WS_EX_CONTROLPARENT:允许用户使用Tab键在窗口的子窗口间搜索。

WS_EX_DLGMODALFRAME:创建一个带双边的窗口;该窗口可以在dwStyle中指定WS_CAPTION风格来创建一个标题栏。

WS_EX_LEFT:窗口具有左对齐属性,这是缺省设置的。

WS_EX_LEFTSCROLLBAR:如果外壳语言是如Hebrew,Arabic,或其他支持reading order alignment的语言,则标题条(如果存在)则在客户区的左部分。若是其他语言,在该风格被忽略并且不作为错误处理。

WS_EX_LTRREADING:窗口文本以LEFT到RIGHT(自左向右)属性的顺序显示。这是缺省设置的。

WS_EX_MDICHILD:创建一个MD子窗口。

WS_EX_NOPATARENTNOTIFY:指明以这个风格创建的窗口在被创建和销毁时不向父窗口发送WM_PARENTNOTFY消息。

WS_EX_OVERLAPPED:WS_EX_CLIENTEDGE和WS_EX_WINDOWEDGE的组合。

WS_EX_PALETTEWINDOW:WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW和WS_WX_TOPMOST风格的组合WS_EX_RIGHT:窗口具有普通的右对齐属性,这依赖于窗口类。只有在外壳语言是如Hebrew,Arabic或其他支持读顺序对齐(reading order alignment)的语言时该风格才有效,否则,忽略该标志并且不作为错误处理。

WS_EX_RIGHTSCROLLBAR:垂直滚动条在窗口的右边界。这是缺省设置的。

WS_EX_RTLREADING:如果外壳语言是如Hebrew,Arabic,或其他支持读顺序对齐(reading order alignment)的语言,则窗口文本是一自左向右)RIGHT到LEFT顺序的读出顺序。若是其他语言,在该风格被忽略并且不作为错误处理。

WS_EX_STATICEDGE:为不接受用户输入的项创建一个3一维边界风格

WS_EX_TOOLWIDOW:创建工具窗口,即窗口是一个游动的工具条。工具窗口的标题条比一般窗口的标题条短,并且窗口标题以小字体显示。工具窗口不在任务栏里显示,当用户按下alt+Tab键时工具窗口不在对话框里显示。如果工具窗口有一个系统菜单,它的图标也不会显示在标题栏里,但是,可以通过点击鼠标右键或Alt+Space来显示菜单。

WS_EX_TOPMOST:指明以该风格创建的窗口应放置在所有非最高层窗口的上面并且停留在其L,即使窗口未被激活。使用函数SetWindowPos来设置和移去这个风格。

WS_EX_TRANSPARENT:指定以这个风格创建的窗口在窗口下的同属窗口已重画时,该窗口才可以重画。

由于其下的同属富日已被重画,该窗口是透明的。

IpClassName:指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobaIAddAtom函数产生的全局量。这个小于OxCOOO的16位数必须是IpClassName参数字的低16位,该参数的高位必须是O。

如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。

lpWindowName:指向一个指定窗口名的空结束的字符串指针。

如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用CreateWindow

函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。

dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。

x:参见CreateWindow。

y:参见CreateWindow。

nWidth:CreateWindow。

nHeigth:参见CreateWindow。

hWndParent:参见CreateWindow。

hMenu:参见CreateWindow。

hlnstance:参见CreateWindow。

lpParam:参见CreateWindow。

返回值:参见CreateWindow。

备注:参见CreateWindow。

速查:Windows NT:31以上版本;Windows:95以上版本;Windows CE:10以上版本;头文件:winuserh;库文件:USer32lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12178822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存