📄 040103.htm
字号:
声明:<br>
Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long<br>
参数:<br>
hDC--指定一个设备场景(即显示设备描述表)的句柄。<br>
x,y--某点在该设备场景中的(x,y)坐标。以该设备场景的坐标系统来度量。<br>
调用如:<br>
……<br>
hDC=GetDC(hwnd)<br>
lxn=GetPixel(hDC,50,50) <br>
Picture1.BackColor=lxn<br>
注:指定的点不能位于设备场景的区域外。如上例(50,50)在hDC所属窗口区域内<br>
====<br>
EnableWindow函数:让窗口拒绝接受鼠标和键盘事件<br>
使用此函数,可以让1个窗口不响应任何鼠标键盘操作。如果是VB内部的窗体或控件,则相当于它的Enabled属性。<br>
声明:<br>
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long<br>
调用如: Call EnableWindow(Form1.hwnd, 0)为拒绝接受鼠标和键盘事件,<br>
调用如: Call EnableWindow(Form1.hwnd, 1)为允许接受键盘和鼠标事件。<br>
参数:hwnd不用说,就是一个窗口句柄,fEnable参数:窗口是否响应操作。为零禁止操作窗口,非零允许操作窗口。<br>
=====<br>
ShowWindow函数:显示或隐藏指定句柄的窗口<br>
将1个隐藏的窗口显示出来,有意思,相当于VB自身内部控件的visible属性。而且超越于此,它还能指定显示时是否最大化,最小化等,声明如下:<br>
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long <br>
调用如:<br>
Const SW_HIDE = 0 参数nCmdShow之一,隐藏窗口<br>
Const SW_SHOW = 5 显示窗口 <br>
i = ShowWindow(form1.hwnd, SW_HIDE)<br>
参数:<br>
hwnd: Long,窗口句柄,要向这个窗口应用由nCmdShow指定的命令 <br>
nCmdShow: Long,为窗口指定显示或隐藏的一个命令。请用下述任何一个常数 <br>
SW_HIDE 隐藏窗口,活动状态给令一个窗口 <br>
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口 <br>
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态 <br>
SW_SHOW=5 用当前的大小和位置显示一个窗口,同时令其进入活动状态 <br>
SW_SHOWMAXIMIZED=3 最大化窗口,并将其激活 <br>
SW_SHOWMINIMIZED=2 最小化窗口,并将其激活 <br>
SW_SHOWDEFAULT=10 按窗口本来的方式显示,并激活。<br>
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口 <br>
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 <br>
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 <br>
SW_SHOWNORMAL 与SW_RESTORE相同 <br>
注:各常数的值请查阅API浏览器中的constants(常数列表)。<br>
======<br>
关闭指定句柄的窗口:SendMessageA的WM_CLOSE消息 <br>
SendMessageA的声明在前面有,消息WM_CLOSE的值为&H10,后两个参数为空,用0&。函数返回值若为0表示程序处理了此消息。调用如下:<br>
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long<br>
Const WM_CLOSE = &H10<br>
Private Sub Command1_Click()<br>
SendMessage Form1.hwnd, WM_CLOSE, 0&, 0&<br>
End Sub<br>
还有一个强制从内存中清除窗口的函数:DestroyWindow函数<br>
其功能是直接清除掉内存中的1个窗口,返回非0表示成功,返回0表示失败。声明:<br>
Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long)<br>
很简单,参数只是指定1个窗口句柄。调用如:DestroyWindow Form1.hwnd。<br>
=====<br>
寻找窗口列表中第一个符合条件的父窗口: FindWindowA函数 <br>
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long<br>
函数返回找到的窗口的句柄。比如要查找标题为"未命名-记事本"的窗口句柄:<br>
hWndTmp = FindWindowA(vbNullString,"未命名-记事本") 二个参数均为字符串,如果某个为空,则用vbNullString或0&补上。<br>
参数:<br>
lpClassName:某窗口类名,或设为零或vbNullString,表示接收任何类 <br>
lpWindowName:某窗口标题,或设为零或vbNullString,表示接收任何窗口标题 。<br>
该函数常用来查找ThunderRTMain窗口类的隐藏窗口的句柄。例如:<br>
Dim hw&, cnt&<br>
Dim rttitle As String * 256<br>
hw& = FindWindowA("ThunderRT5Main", vbNullString) <br>
cnt = GetWindowText(hw&, rttitle, 255)<br>
MsgBox Left$(rttitle, cnt), 0, "RTMain title" <br>
=====<br>
根据1个窗口句柄返回另1个相关窗口句柄 :GetWindow函数<br>
传入一个源窗口句柄,返回另1个与之有关的窗口句柄,如源窗口的下1个兄弟窗口,第1个子窗口等。声明:<br>
Declare Function GetWindow Lib "user32"(ByVal hwnd As Long, ByVal wCmd As Long) As Long<br>
调用如:<br>
Const GW_HWNDNEXT = 2 <br>
hWndlxn = GetWindow(hWndTmp, GW_HWNDNEXT)<br>
参数:hwnd:源窗口句柄。 <br>
wCmd参数:指定结果窗口与源窗口的关系,它们建立在下述常数基础上: <br>
GW_CHILD 寻找源窗口的第一个子窗口 <br>
GW_HWNDFIRST 为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口 <br>
GW_HWNDLAST 为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口 <br>
GW_HWNDNEXT 为源窗口寻找下一个兄弟窗口 <br>
GW_HWNDPREV 为源窗口寻找前一个兄弟窗口 <br>
GW_OWNER 寻找窗口的所有者 <br>
注解 <br>
兄弟或同级是指在整个分级结构中位于同一级别的窗口。如某个窗口有五个子窗口,那五个窗口就是兄弟窗口。尽管GetWindow可用于枚举窗口,但倘若要在枚举过程中重新定位、创建和清除窗口,那么EnumWindows和EnumChildWindows更为可靠。<br>
=====<br>
GetWindowLongA函数:获得指定窗口某方面的结构信息(返回长整数)。<br>
问题:什么叫"窗口的结构数据信息"?就是1个窗口的诸方面情况吧,象人有姓名性别年龄等一样,窗口有"扩展样式(包含标题栏,如在Form1中表现为BorderStyle属性,有标题栏缩小、无标题栏等的组合值)","样式(包含滚动条、系统菜单、边框等可设置)","父窗口","子窗口","窗口函数"等诸多方面,见下面nIndex参数值。这些方面的内容(每1方面只能有1个当前值)就构成了窗口的结构信息。<br>
该函数从附加窗口内存中返回1个长整数值。<br>
声明:<br>
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long<br>
此函数用来获取指定窗口的某方面"结构数据"信息。 函数返回值由参数nIndex来决定要返回哪个方面的当前值。若出错则返回0。<br>
调用如:Const GWL_STYLE = -16<br>
Private Sub Command1_Click()<br>
X = GetWindowLongA(Form1.hwnd, GWL_STYLE)<br>
Print X<br>
End Sub<br>
参数:<br>
hwnd: Long,欲获取信息的窗口的句柄 <br>
nIndex: Long,欲取回此窗口哪方面的信息,可以是下述任何一个常数: <br>
GWL_EXSTYLE 扩展窗口样式 <br>
(可能包含有:WS_EX_TOOLWINDOW=&H80标题栏缩小可变大小,相当于BorderStyle=5; WS_EX_TRANSPARENT=&H20&隐藏绘图区,但显示其上的子控件。有意思。等,别的我也不太清楚,好象要去查MSDN才可查到) <br>
GWL_STYLE 窗口样式 <br>
(可能值有:WS_VSCROLL=?垂直滚动条,WS_HSCROLL=?水平滚动条,<br>
WS_MAXIMIZEBOX=?标题栏右边最大化纽,WS_MINIMIZEBOX=?最小化纽等等)<br>
GWL_WNDPROC 该窗口的窗口函数的地址 <br>
GWL_HINSTANCE 拥有窗口的实例的句柄 <br>
GWL_HWNDPARENT 该窗口之父的句柄。不要用SetWindowWord来改变这个值 <br>
GWL_ID 对话框中一个子窗口的标识符 <br>
GWL_USERDATA 含义由应用程序规定 <br>
DWL_DLGPROC 这个窗口的对话框函数地址 <br>
DWL_MSGRESULT 在对话框函数中处理的一条消息返回的值 <br>
DWL_USER 含义由应用程序规定 <br>
-----<br>
SetWindowLongA函数:为窗口设置窗口结构信息<br>
常用此函数来动态地设置窗口的风格(如样式,滚动条等等)。即不在属性窗口中设置。而在API中设置。 <br>
声明:<br>
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long<br>
调用如:<br>
Public Const WS_EX_TOOLWINDOW = &H80<br>
lStyle = WS_EX_TOOLWINDOW<br>
lRet = SetWindowLongA(Me.hwnd, GWL_EXSTYLE, GetWindowLongA(Me.hwnd, GWL_EXSTYLE) Or lStyle) 注:这里有1个Or"或"操作。为何要用OR呢?这是因为一个窗口的GWL_EXSTYLE包含了多项设置值的和(如同时可能有滚动条,标题栏等值的组合,如为262400),用or就可只改动其部分值,而保留其他方面原设置不变。<br>
参数:<br>
hwnd Long,欲设置信息的窗口的句柄 <br>
nIndex Long,请参考GetWindowLong函数的nIndex参数的说明 <br>
dwNewLong Long,由nIndex指定的窗口信息的新值 <br>
-------<br>
GetWindowWord函数:获得指定窗口的结构信息(返回字值) <br>
该函数从附加窗口内存中返回字值。与GetWindowLong相似。 <br>
声明: <br>
Declare Function GetWindowWord Lib "user32" Alias "GetWindowWord" (ByVal hwnd As Long, ByVal nIndex As Long) As Integer<br>
调用如:<br>
Const GWL_HWNDPARENT = -8<br>
parent = GetWindowWord(Form1.hwnd, GWL_HWNDPARENT) <br>
这里调用后parent返回Form1的上一级父窗口的句柄。再例如command1在form1中, x=GetWindowWord(command1.hwnd,GWL_HWNDPARENT)返回的x就等于form1.hwnd.<br>
参数见GetWindowLong.<br>
======<br>
获得指定窗口所属的窗口类名称:GetClassNameA函数<br>
声明:<br>
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long<br>
调用如--求Form1所属的窗口类的名称 :<br>
pclass = Space(31) <br>
nlen = GetClassNameA(form1.hwnd, pclass, 32)<br>
pclass = Left(pclass, nlen)<br>
第1个参数为某窗口句柄。第2个参数为字符串缓冲区,第3个参数为缓冲区长度。<br>
参数lpClassName返回值为窗口类名称字符串,如上例为ThunderFormDC类。<br>
函数返回值为类名字符串长度。如上面nlen为13。<br>
====<br>
创建不规则窗口之"圆角矩形":SetWindowRgn结合CreateRoundRectRgn函数<br>
SetWindowRgn函数用于创建各种几何形状的窗口,声明前面已有,为:<br>
Public Declare Function SetWindowRgn Lib "user32" Alias "SetWindowRgn" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long<br>
第1个参数为窗口句柄,第2个参数为几何形状区域句柄,第3个参数为是否立即重画。 <br>
函数CreateRoundRectRgn为创建圆角矩形,函数返回创建的圆角区域句柄。声明:<br>
Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long<br>
参数就是三个(X,Y)值,X1,Y1为左上角坐标,因为是用窗口自身坐标系统来度量,所以左上角坐标一般为0,0(注:FORM窗体为scaleleft,scaletop),X2,Y2为右下角坐标(注意不一定是直接的width或scalewidth,要用scaleleft+scalewidth才是"右下角"横坐标):如果是控件,就是其width,height的值,而如果是窗体,要加上其scaleleft,scaletop<br>
得到右下角坐标值。X3,Y3表示圆角的大小。X3的取值范围是0(无圆角)到矩形宽(width或scalewidth,全圆),Y3的取值范围是0(无圆角)到矩形高(height或scaleheight,全圆),常乘以一个0至1的单精度数来表示。例如:<br>
x = SetWindowRgn(form1.hwnd, CreateRoundRectRgn(form1.ScaleLeft, form1.ScaleTop, form1.ScaleWidth + form1.ScaleLeft, form1.ScaleHeight + form1.ScaleTop, form1.ScaleWidth * 0.6, form1.ScaleHeight * 0.6), True)<br>
最后说明一下,还有一个API函数可直接画圆角矩形,就是RoundRect函数。声明:<br>
Declare Function RoundRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long<br>
其中参数hDC是窗口的设备场景句柄。三个(X,Y)和CreateRoundRectRgn的是一样的,分别为左上角,右下角坐标和圆角大小。<br>
======<br>
获取本程序活动窗口的句柄:GetActiveWindow函数<br>
声明:<br>
Declare Function GetActiveWindow Lib "user32"() As Long<br>
很简单,函数返回值为当前本程序活动窗口句柄。调用如:x=GetActiveWindow,这个函数不如GetForegroundWindow函数,建议用下面的:<br>
----<br>
获取屏幕上当前活动窗口的句柄:GetForegroundWindow函数<br>
这个函数功能更强大,能获取前台应用程序的活动窗口句柄。声明:<br>
Declare Function GetForegroundWindow Lib "user32" () As Long<br>
函数返回值为当前屏幕上活动窗口的句柄,如:x=GetForegroundWindow。<br>
-----<br>
判断一个窗口是否是活动窗口:IsWindowEnabled函数<br>
声明:<br>
Declare Function IsWindowEnabled Lib "user32"(ByVal hwnd As Long) As Long <br>
参数hwnd是待检测窗口句柄。<br>
调用如:x=IsWindowEnabled(Form1.hwnd),函数返回值若非0表示为活动窗口,返回0表示为失效窗口。<br>
----<br>
禁止任务条--任务条所属窗口类为"Shell_traywnd",用FindWindowA函数去查,如下: TaskBarhWnd = FindWindowA("Shell_traywnd", ""),然后用EnableWindow函数: lxn = EnableWindow(TaskBarhWnd,0)就可以了。 <p align="center">
<br>
< <a href="040102.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="040104.htm">下一页</a>
><br>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -