API 窗口类名

来源:百度知道 编辑:UC知道 时间:2024/05/22 20:46:01
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
lpClassName 类名不是不就是name属性的名称?
lpWindowName 窗体名就是VB中的caption名称?

第一个回答是错的,第二个回答是正确的。
你说的name其实就是变量名而已。象dim a。
你在name里输入个a,就表示你创建了一个变量名为a的窗口或控件。
以后可以使用a.caption="这个是窗口标题,也是lpWindowName".
在很多API里都会要你传递lpClassName和lpWindowName的。但一般我们只使用lpWindowName。因为这个窗口标题栏一般是唯一的,因此象FindWindow这样的API通常我们只传递lpClassName为""。当然如果有两个窗口名称都是一样的标题,那FindWindow就不能保证会按照你的意图找到你那个窗口。它会按照一定的搜索顺序来找它找到的第一个为lpWindowName的窗口,但那个搜索路径你没必要了解,一般不会发生这种情况的.
再说下lpClassName,可能学VB的人不太会有人知道lpClassName是什么,但学VC的人大部分都知道.它是一种窗口的类的名称.譬如在VB工具栏里有很多的控件(注意控件也是窗口的一种,只是看上去小多了,外观也和一般窗口变了很多。),如按钮,编辑框。这些标准的按钮只有一个类名,是微软实现定义好的,我们无法修改。所有窗口都需要象windows操作系统进行注册,注册的内部实现细节我不太清楚。但它的重要性是很容易猜测的:就像所有的学生在入学前都需要注册,显然注册的目的是为了便于管理。但窗口注册还是会有些不同,就是窗口像windows注册是用窗口的类名注册的,而不是窗口的标题来向windows注册。
象VC里,我们经常自己设计个窗口,然后给这种窗口定义个类名(VB和VC里的MFC,通常不会让我们自己挑一个类名,都是由开发环境自动给我们取个类名,因此窗口注册其实是对VB和VC里的MFC的程序员来讲是不可见的),最后用RegisterClass这个API向windows注册。注册完后,才能开始创建个窗口的对象(实例)。如我们注册了个比VB标准按钮小一半的按钮,然后就可以在代码里造出这种风格的好多个按钮,并且可以给它们取不同的name(就是变量名),也可以取不同的按钮名(按钮的窗口名就是按钮上你看得到的名字)。然后当我们要用到FindWindow这样的API时,我们一般就不太会