`

VB中不规则图形热点的实现

vb 
阅读更多

所谓图形热点就是指定图形或图像上的某部分区域,当鼠标在这部分区域上单击或双击时,就像命令按钮一样会引发相应事件。笔者在VB 5中用Windows提供的三个API函数轻松实现了任何形状的图形热点,在此具体介绍这一技术的实现步骤。
  首先在VB5中新建一"标准EXE工程",设置窗体Form1的ScaleMode属性为3。在窗体代码的声明部分定义如下三个API函数:
  Private Type POINTAPI
    x As Long
    y As Long
  End Type
  Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, _
   ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
  Private Declare Function DeleteObject Lib "gdi32"(ByVal hObject As Long) As Long
  Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long,ByVal x As Long, _
   ByVal y As Long) As Long
  函数说明:CreatePolygonRgn( )函数是用来创建一个图形热点对象,lpPoint参数为形成图形热点区的第一个边界点坐标,nCount参数指出了边界点的个数(如nCount<3时,将无法形成一个封闭区域),nPolyFillMode参数指定填充模式,该函数返回图形热点对象(Long型);DeleteObject( )函数用来删除一个由hObject参数指定的对象;PtInRegion( )函数用来判断某坐标(由参数x、y指出)是否在hRgn图形热 点对象指出的热点区内,若是返回1,否则返回0。
  其次在申明部分再添入下列自定义变量:
  Const MAXCOUNT = 30 '热点区边界点的最多个数
  Dim RgnPt(MAXCOUNT) As POINTAPI '热点数组
  Dim RgnObject, RgnCount, flag As Long
  然后在Form1窗体的上方创建一个PictureBox控件,设置名称为P1 ,ScaleMode属性为3,Picture属性指定一幅BMP图像。在P1的MouseMove事件和MouseDown事件中添入下列代码:
  Private Sub P1_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
   If button = 1 Then '必须按下鼠标左键才有效
    RgnPt(RgnCount).x = x
    RgnPt(RgnCount).y = y
    RgnCount = RgnCount + 1
   End If
  End Sub
  Private Sub P1_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
   If PtInRegion(RgnObject, x, y) = 1 Then
    Label1.ForeColor = QBColor(12)
    Label1.Caption = " 进入图形热点区!鼠标形状变为沙漏状!"
    P1.MousePointer = 11 '设置鼠标形状为沙漏状
   ElseIf flag = 1 Then
    Label1.ForeColor = 0
    Label1.Caption = " 没有进入图形热点区!"
    P1.MousePointer = 0
   End If
  End Sub
  接着在P1的下方并排创建两个CommandButton控件,Caption属性分别设为"创建热点"和"使用热点", 名称分别设为CrtRgn(对应"创建热点")和DspRgn。在这两个命令按钮的下方创建一个Label控件作为操作 提示区,取默认名Label1,Caption属性设为空,BackColor设为白色, BorderStyle属性设为1,字体为黑体加粗小四号。双击CrtRgn和DspRgn,在它们的Click事件中分别添入以下代码:
  Private Sub CrtRgn_Click()
   Dim tmp As Long
   RgnCount = 0
   tmp = DeleteObject(RgnObject)
   Label1.Caption = " 在图像上单击鼠标左键来创建图形热点的范围!"+ _
    "至少应在不同位置单击三次以上,否则形不成封闭区域!"
   flag = 0
  End Sub
  Private Sub DspRgn_Click()
   RgnObject = CreatePolygonRgn(RgnPt(0), RgnCount, 1)
   flag = 1
  End Sub
  最后在窗体代码的任意位置添入Form_Load()事件:
  Private Sub Form_Load()
   ScaleMode = 3
   P1.ScaleMode = 3
  End Sub
  按F5运行后,首先单击"创建热点"按钮,在图像区域内的不同位置 单击鼠标左键,最好单击三次以上,否则形不成热点区。然后单击"使用热点"按钮,在图像框内移动鼠标,你会发现当鼠标进入热点区后, 形状变为沙漏状。本文中的程序仅为演示程序,在实际应用中,可以事先创建好热点区数组,然后在热点区的MouseDown( )事件中添入相应的代码,即可使用图形热点代替命令按钮。
  本程序在VB5/Win 95、Win 98下通过。

分享到:
评论

相关推荐

    精彩编程与编程技巧-VB中不规则图形热点的实现...

    ### 知识点详解:VB中不规则图形热点的实现 #### 一、背景介绍 在Visual Basic(简称VB)编程环境中,实现图形界面交互功能是常见需求之一。特别是对于不规则图形,如何准确地判断鼠标光标是否位于该图形内部,即...

    VB.net不规则图形碰撞检测(附源工程)

    在VB.NET中实现不规则图形的碰撞检测是一个有趣且实用的技术挑战,特别是在开发游戏或交互式应用程序时。本文将深入探讨这一主题,并基于提供的描述,分析实现这一功能的关键知识点。 首先,我们要理解“不规则图形...

    VB 不规则窗体

    实现VB不规则窗体主要涉及以下几个关键技术点: 1. **透明度处理**:Windows API提供了一个名为`SetWindowRgn`的函数,可以设置窗口的区域,使其具有透明或半透明效果。通过自定义窗体的区域,可以实现非矩形的形状...

    VB生成规则图形的例子.rar

    在VB(Visual Basic)编程环境中,生成规则图形是一项常见的任务,尤其对于初学者来说,它有助于理解基础的图形绘制和编程逻辑。VB源码-图形处理这个标签表明我们讨论的内容将集中在利用VB代码来实现图形的创建。在...

    Vb制作不规则窗体(。。。。。。。。。)

    在VB(Visual Basic)编程中,创建不规则窗体是一个有趣且富有挑战性的任务,它涉及到Windows API(应用程序接口)的使用以及图形处理技术。不规则窗体允许开发者设计出打破常规,拥有独特外观和交互体验的应用程序...

    vb创建不规则窗体

    下面将详细解释如何在VB中实现不规则窗体的创建。 1. **GDI+库的使用**: VB6本身并不直接支持不规则窗体,但可以通过引入GDI+图形接口来实现。GDI+是Windows系统中的一个强大的图形绘制库,它提供了丰富的绘图...

    fillrgn.zip_FILLRGN_vb FillRgn_不规则图形_图形 填充_填充

    在VB(Visual Basic)编程环境中,`FillRgn`函数是一种用于填充指定区域的重要图形绘制技术,尤其在处理不规则图形时非常有用。本示例`fillrgn.zip_FILLRGN_vb FillRgn_不规则图形_图形 填充_填充`将指导我们如何在...

    VB 如何实现随机图形验证码

    VB 如何实现随机图形验证码 VB 如何实现随机图形验证码

    VB制作个性化图形窗体源代码

    "VB制作个性化图形窗体源代码"是一个关于如何利用VB来构建非标准、不规则形状的图形化窗体的资源。这个压缩包包含了实现这一目标的源代码,对于学习和理解VB图形化编程非常有帮助。 首先,VB中的窗体是应用程序的...

    Vb画圆并组合成规则图形

    在VB(Visual Basic)编程环境中,我们可以利用内置的...通过熟练掌握这些函数和方法,不仅可以实现"Vb画圆并组合成规则图形"这样的练习,还能在更广泛的项目中发挥创造力,例如游戏开发、数据可视化、用户界面设计等。

    vb不规则区域的填充源码.rar_VB_VB 填充不规则_vb 填充_不规则_区域

    VB不规则区域的填充通常涉及到图形API的使用,如GDI+(Graphics Device Interface Plus)或者WinAPI中的FillRgn函数。下面将详细介绍这个主题,以及如何实现不规则区域的填充。 首先,我们要理解什么是不规则区域。...

    Vb输出简单的字符图形

    在VB中,可以结合`For...Next`循环和`If...Then`语句实现这个目标。 首先,我们需要了解`Print`方法的基本语法。在VB6中,`Print`方法的使用可能如下: ```vb Print [;] expression [[;] ...] ``` 这里,`...

    vb绘制简单图形的代码

    在VB(Visual Basic)编程环境中,我们可以利用GDI+(Graphics Device Interface Plus)库来实现图形的绘制。这个库提供了丰富的函数和方法,使我们能够创建各种形状,如五角星、椭圆以及填充图形,甚至可以绘制出...

    VB实现窗体中可以移动的图形Move实例代码.rar

    本实例代码“VB实现窗体中可以移动的图形Move实例代码”正是针对这一需求的一个示例,它展示了如何利用VB的Move方法来实现图形对象在窗体上的自由移动。 在VB中,图形的移动通常是通过对控件的位置属性进行修改来...

    VB编程源代码 02图形窗体

    VB编程源代码 02图形窗体VB编程源代码 02图形窗体VB编程源代码 02图形窗体VB编程源代码 02图形窗体VB编程源代码 02图形窗体VB编程源代码 02图形窗体VB编程源代码 02图形窗体VB编程源代码 02图形窗体VB编程源代码 02...

    图形处理VB图形处理图形处理

    这一部分主要利用了VB中的`Image`控件来实现图形的动态滚动显示效果。`Image`控件具有自动缩放所显示图形的功能,并且具有`Stretch`属性。当`Stretch`属性设置为`False`时(这是默认值),`Image`控件会根据图片的...

    一个趣味的VB图形窗口的实现实例.rar

    在这个"一个趣味的VB图形窗口的实现实例"中,开发者通过巧妙地利用图片框(PictureBox)控件,实现了像素级别的窗口定制,并能够动态调整窗口大小以适应图片,最终创建了一个不规则形状的窗口。以下是对这个实例的...

    图形用户界面(用VB实现的)

    《VB实现的图形用户界面详解》 VB,全称Visual Basic,是Microsoft公司推出的一种面向对象的编程语言,尤其在创建图形用户界面(GUI)方面表现出色。图形用户界面是现代软件的重要组成部分,它使用户能够通过直观的...

    在VB6.0和DX9中实现3D图象编程

    VB6.0是Microsoft Visual Basic的一个老版本,虽然它不支持原生的3D图形功能,但可以通过与其他库如DirectX结合来实现3D图像编程。 DirectX 9是微软开发的一套应用程序接口(API),主要用于多媒体,尤其是游戏和...

    VB.NET2008编写的不规则窗体

    在VB.NET 2008中,我们可以通过编程实现不规则窗体,即非标准矩形形状的窗口,这在创建具有个性化外观的应用程序时非常有用。这种技术通常依赖于GDI+(Graphics Device Interface Plus)图形库,它是.NET Framework...

Global site tag (gtag.js) - Google Analytics