⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 040103.htm

📁 提供一个VB学习教程,入门级。来源于网上
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>vb study</title>
<style>
<!--
td {font-size: 9pt}
A:link {text-decoration: none; color: #0033cc;font-size: 9pt}
A:visited {text-decoration: none; color: #0066CC;font-size: 9pt}
A:active {text-decoration: none; color: #ff0000; font-size: 9pt}
A:hover {text-decoration: underline; color: #000000;font-size: 9pt}
-->
</style>
</head>
<body>
<div align="center">
  <center>
  <table border="0" cellpadding="0" cellspacing="0" width="98%">
    <tr>
      <td width="100%"><a href="#">你的位置</a>:<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="#">VB学习</a>--<a href="#">API函数</a></td>
    </tr>
    <tr>
      <td width="100%">
        <p align="center">窗口类函数</td>
    </tr>
    <tr>
      <td width="100%"><br>
        SetWindowPos函数:使窗口停留在屏幕最顶层。<br>
        声明:<br>
        Private Declare Function SetWindowPos Lib &quot;user32&quot; (ByVal hwnd As Long, _<br>
        ByVal hWndinsertAfter As Long, ByVal x As Long, ByVal y As Long, _<br>
        ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long<br>
        调用如:<br>
        Private Sub Form_Load()<br>
        SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, &amp;H2 + &amp;H1<br>
        End Sub 窗口form1将保留在屏幕表面。<br>
        该函数功能是为窗口指定1个新的位置和状态。参数:<br>
        hwnd:欲定位的窗口。<br>
        hwndinsertAfter:指定窗口的位置。 可能选用下述值之一: <br>
        HWND_BOTTOM 将窗口置于窗口列表底部 <br>
        HWND_TOP 将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序 <br>
        HWND_TOPMOST(值-1) 将窗口置于列表顶部,并位于任何最顶部窗口的前面 <br>
        HWND_NOTOPMOST(值-2) 将窗口置于列表顶部,并位于任何最顶部窗口的后面 <br>
        x: 窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示 <br>
        y: 窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示 <br>
        cx:指定新的窗口宽度 <br>
        cy:指定新的窗口高度 <br>
        wFlags:包含了游标的一个整数,可能为下述值或其组合。 <br>
        SWP_DRAWFRAME 围绕窗口画一个框 <br>
        SWP_HIDEWINDOW 隐藏窗口 <br>
        SWP_NOACTIVATE 不激活窗口 <br>
        SWP_NOMOVE 保持当前位置(x和y设定将被忽略) <br>
        SWP_NOREDRAW 窗口不自动重画 <br>
        SWP_NOSIZE 保持当前大小(cx和cy会被忽略) <br>
        SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略) <br>
        SWP_SHOWWINDOW 显示窗口 <br>
        SWP_FRAMECHANGED 强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变 <br>
        ======<br>
        移动无标题栏的窗口:在标准模块中声明<br>
        Declare Function ReleaseCapture Lib &quot;user32&quot; () As Long<br>
        ReleaseCapture函数:为当前程序释放鼠标捕获。<br>
        Declare Function SendMessage Lib &quot;user32&quot; _<br>
        Alias &quot;SendMessageA&quot; ( _<br>
        ByVal hwnd As Long, ByVal wMsg As Long, _<br>
        ByVal wParam As Long, lParam As Any) As Long<br>
        Public Const HTCAPTION = 2<br>
        Public Const WM_NCLBUTTONDOWN = &amp;HA1 此消息指在窗口的非客户区域内按下左键<br>
        在FORM_mousedown事件中写:<br>
        Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)<br>
        ReleaseCapture (此句为释放鼠标本来在Form客户区的捕获)<br>
        SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&amp;<br>
        End Sub<br>
        ====<br>
        创建椭圆(不规则)窗口:SetWindowRgn函数结合CreateEllipticRgn椭圆函数<br>
        SetWindowRgn函数用来创建不规则窗口,如椭圆(结合CreateEllipticRgn),多边形(结合CreatePolygonRgn),矩形(结合CreateRectRgn),圆角矩形(结合CreateRoundRectRgn)等。 <br>
        声明:<br>
        Private Declare Function CreateEllipticRgn Lib &quot;gdi32&quot; (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long<br>
        Private Declare Function SetWindowRgn Lib &quot;user32&quot; (ByVal hWnd As Long, _<br>
        ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long<br>
        调用如:<br>
        Private Sub Form_Load()<br>
        SetWindowRgn hWnd, CreateEllipticRgn(0, 0, 300, 200), True<br>
        End Sub<br>
        SetWindowRgn函数用于创建不规则窗口,可创建任何几何形状的窗口,只要用Create…Rgn函数返回值传入各种形状区域句柄,参数:<br>
        参数 类型及说明 <br>
        hWnd:将设置其区域的窗口的句柄。 <br>
        hRgn:设置好的区域的句柄,一旦设置了该区域,就不能使用或修改该区域句柄,也不要删除它 <br>
        bRedraw:是否立即重画窗口,若为TRUE,则立即重画窗口 <br>
        注:为区域指定的所有坐标都以窗口坐标(和客户坐标不完全相同)表示,它们以整个窗口(包括标题栏和边框,而客户坐标是指不包括标题栏的窗口内部有效区域)的左上角为起点<br>
        椭圆CreateEllipticRgn函数:创建一个椭圆,该椭圆以X1,Y1和X2,Y2坐标点确定的矩形内切。参数:<br>
        X1,Y1:内切矩形左上角X,Y坐标 <br>
        X2,Y2:内切矩形右下角X,Y坐标 <br>
        ====<br>
        得到屏幕有效区大小(除去任务条):SystemParametersInfoA<br>
        声明:<br>
        Private Type RECT <br>
        Left As Long<br>
        top As Long<br>
        Right As Long<br>
        Botton As Long<br>
        End Type<br>
        Private Declare Function SystemParametersInfoA Lib &quot;user32&quot; _<br>
        (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvparam _<br>
        As Any, ByVal fuWinIni As Long) As Long<br>
        调用如:将窗体移到屏幕有效区中央。<br>
        Private Sub Command2_Click()<br>
        Dim ScreenWidth&amp;<br>
        Dim ScreenHeight&amp;<br>
        Dim ScreenLeft&amp;<br>
        Dim ScreenTop&amp;<br>
        Dim DesktopArea As RECT<br>
        Const SPI_GETWORKAREA = 48 <br>
        Call SystemParametersInfoA(SPI_GETWORKAREA, 0, DesktopArea, 0)<br>
        ScreenHeight = (DesktopArea.Botton - DesktopArea.top) * Screen.TwipsPerPixelY<br>
        ScreenWidth = (DesktopArea.Right - DesktopArea.Left) * Screen.TwipsPerPixelX<br>
        ScreenLeft = DesktopArea.Left * Screen.TwipsPerPixelX<br>
        ScreenTop = DesktopArea.top * Screen.TwipsPerPixelY<br>
        Form1.Move (ScreenWidth - Form1.Width) / 2 + ScreenLeft, (ScreenHeight - Form1.Height) / 2 + ScreenTop<br>
        End Sub<br>
        SystemParametersInfoA函数可用来获取和设置数量众多的windows系统参数。<br>
        参数请查看资料。<br>
        ====<br>
        获得窗口在屏幕上的范围:GetWindowRect函数<br>
        包括窗口的边框,标题栏,滚动条及菜单,客户区等在内,即整个窗口在屏幕上所占的范围.声明:<br>
        Declare Function GetWindowRect Lib &quot;user32&quot;(ByVal hwnd As Long, lpRect As RECT) As Long<br>
        第一个参数是窗口句柄,第二个参数装载窗口范围的坐标值,为一个结构类型,声明如下:<br>
        Public Type RECT<br>
        Left As Long<br>
        Top As Long<br>
        Right As Long<br>
        Bottom As Long<br>
        End Type<br>
        该参数返回窗口在屏幕中的范围值,单位为象素。调用如:<br>
        Private Sub Command1_Click()<br>
        GetWindowRect Command1.hwnd, lxx<br>
        Print lxx.Left, lxx.Top, lxx.Right, lxx.Bottom <br>
        End Sub<br>
        ===========================================<br>
        改变指定窗口的位置和大小:MoveWindow函数<br>
        相当于VB内置的Move方法,但作为API,功能当然更强大,它可对任何非本进程的窗口进行改变,声明:<br>
        Declare Function MoveWindow Lib &quot;user32&quot;(ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long<br>
        第一个参数为要移动的窗口句柄,第二,三,四,五个参数为窗口移动后的新横坐标,新纵坐标,新宽度,新高度,第六个参数为是否立即对窗口进行重画,用True或False。调用如:<br>
        MoveWindow Command1.hwnd, 0, 0, 100, 100, True<br>
        因为改变的是对象在父窗口中的位置,所以Command1按纽被移到窗体Form1的客户区左上角去了。 <br>
        =====<br>
        判断屏幕上1指定点的客户区坐标:ScreenToClient函数 <br>
        判断屏幕上某点相对于指定窗口内的坐标。声明:<br>
        Private Type POINTAPI<br>
        x As Long<br>
        y As Long<br>
        End Type<br>
        Private Declare Function ScreenToClient Lib &quot;user32&quot; (ByVal hwnd As Long, lpPoint As POINTAPI) As Long<br>
        该函数用以测量点lpPoint在句柄为hwnd的窗口内的坐标(如超越此窗口则为负数)。调用如:<br>
        Private Sub Command1_Click()<br>
        Dim lxn As POINTAPI<br>
        lxn.x = 100: lxn.y = 100<br>
        Call ScreenToClient(Form1.hwnd, lxn)<br>
        Print lxn.x, lxn.y<br>
        End Sub<br>
        上例在调用前的lxn参数100,100是屏幕坐标,调用函数后lxn的值是&quot;屏幕坐标为(100,100)的点在form1中的客户坐标是多少。如返回lxn.x=41,lxn.y=38,单位仍为象素,不会变为form1内部的缇。<br>
        ===<br>
        获得窗口内以客户坐标表示的1个点的屏幕坐标 : ClientToScreen函数<br>
        该函数与上面那个正好相反。这里是已知客户坐标求屏幕坐标。注:客户坐标单位须先转为象素。<br>
        声明:<br>
        Declare Function ClientToScreen Lib &quot;user32&quot;(ByVal hwnd As Long, lpPoint As POINTAPI) As Long<br>
        参数hwnd:点所在的客户区窗口的句柄。<br>
        参数lpPoint:传入点的客户区坐标(单位要为象素),并返回点的屏幕坐标(象素)。<br>
        调用如: <br>
        Dim m As POINTAPI<br>
        m.X = 50: m.Y = 70<br>
        a = ClientToScreen(Form1.hwnd, m)<br>
        Print m.X, m.Y<br>
        该函数应用的是参数lpPoint返回值。 <br>
        ======<br>
        获得屏幕上某指定点所在的窗口的句柄 : WindowFromPoint函数 <br>
        声明:<br>
        Private Declare Function WindowFromPoint Lib &quot;user32&quot; (ByVal xPoint As Long, ByVal yPoint As Long) As Long<br>
        参数xPoint,yPoint是某点的&quot;屏幕坐标&quot;。函数返回值为包含该点的窗口句柄。<br>
        调用如:<br>
        Private Sub Command2_Click()<br>
        Dim hwnd As Long<br>
        hwnd = WindowFromPoint(1, 1)<br>
        Print hwnd<br>
        End Sub<br>
        上例表示屏幕上点(1,1)处在句柄为hwnd的窗口内。<br>
        此函数返回的句柄不包含隐藏、屏蔽、透明窗口的。如果要指出屏幕上某点所属的所有窗口,就请用ChildWindowFromPoint函数。<br>
        =========== 获取屏幕上某个窗口内某点的颜色值: GetPixel函数<br>
        该函数在指定设备场景中取得1个象素的颜色RGB值。<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -