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

2016-02-19 16:33 75 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是VB中不规则图形热点的实现,一起来学习了解下吧!

【 tulaoshi.com - 编程语言 】

所谓图形热点就是指定图形或图像上的某部分区域,当鼠标在这部分区域上单击或双击时,就像命令按钮一样会引发相应事件。笔者在VB5中用Windows提供的三个API函数轻松实现了任何形状的图形热点,在此具体介绍这一技术的实现步骤。
  首先在VB5中新建一"标准EXE工程",设置窗体Form1的ScaleMode属性为3。在窗体代码的声明部分定义如下三个API函数:
  PrivateTypePOINTAPI
  xAsLong
  yAsLong
  EndType
  PrivateDeclareFunctionCreatePolygonRgnLib"gdi32"(lpPointAsPOINTAPI,ByValnCountAsLong,ByValnPolyFillModeAsLong)AsLong
  PrivateDeclareFunctionDeleteObjectLib"gdi32"(ByValhObjectAsLong)AsLong
  PrivateDeclareFunctionPtInRegionLib"gdi32"(ByValhRgnAsLong,ByValxAsLong,ByValyAsLong)AsLong
  函数说明:CreatePolygonRgn()函数是用来创建一个图形热点对象,lpPoint参数为形成图形热点区的第一个边界点坐标,nCount参数指出了边界点的个数(如nCount3时,将无法形成一个封闭区域),nPolyFillMode参数指定填充模式,该函数返回图形热点对象(Long型);DeleteObject()函数用来删除一个由hObject参数指定的对象;PtInRegion()函数用来判断某坐标(由参数x、y指出)是否在hRgn图形热点对象指出的热点区内,若是返回1,否则返回0。
  其次在申明部分再添入下列自定义变量:
  ConstMAXCOUNT=30'热点区边界点的最多个数
  DimRgnPt(MAXCOUNT)AsPOINTAPI'热点数组
  DimRgnObject,RgnCount,flagAsLong
  然后在Form1窗体的上方创建一个PictureBox控件,设置名称为P1,ScaleMode属性为3,Picture属性指定一幅BMP图像。在P1的MouseMove事件和MouseDown事件中添入下列代码:
  PrivateSubP1_MouseDown(buttonAsInteger,shiftAsInteger,xAsSingle,yAsSingle)
   Ifbutton=1Then'必须按下鼠标左键才有效
  RgnPt(RgnCount).x=x
  RgnPt(RgnCount).y=y
  RgnCount=RgnCount 1
   EndIf
  EndSub
  PrivateSubP1_MouseMove(buttonAsInteger,shiftAsInteger,xAsSingle,yAsSingle)
   IfPtInRegion(RgnObject,x,y)=1Then
  Label1.ForeColor=QBColor(12)
  Label1.Caption="进入图形热点区!鼠标形状变为沙漏状!"
  P1.MousePointer=11'设置鼠标形状为沙漏状
   ElseIfflag=1Then
  Label1.ForeColor=0
  Label1.Caption="没有进入图形热点区!"
  P1.MousePointer=0
   EndIf
  EndSub
  接着在P1的下方并排创建两个CommandButton控件,Caption属性分别设为"创建热点"和"使用热点",名称分别设为CrtRgn(对应"创建热点")和DspRgn。在这两个命令按钮的下方创建一个Label控件作为操作提示区,取默认名Label1,Caption属性设为空,BackColor设为白色,BorderStyle属性设为1,字体为黑体加粗小四号。双击CrtRgn和DspRgn,在它们的Click事件中分别添入以下代码:
  PrivateSubCrtRgn_Click()
   DimtmpAsLong
   RgnCount=0
   tmp=DeleteObject(RgnObject)
   Label1.Caption="在图像上单击鼠标左键来创建图形热点的范围!" _
  "至少应在不同位置单击三次以上,否则形不成封闭区域!"
   flag=0
  EndSub
  PrivateSubDspRgn_Click()
   RgnObject=CreatePolygonRgn(RgnPt(0),RgnCount,1)
   flag=1
  EndSub
  最后在窗体代码的任意位置添入Form_Load()事件:
  PrivateSubForm_Load()
   ScaleMode=3
   P1.ScaleMode=3
  EndSub
  按F5运行后,首先单击"创建热点"按钮,在图像区域内的不同位置单击鼠标左键,最好单击三次以上,否则形不成热点区。然后单击"使用热点"按钮,在图像框内移动鼠标,你会发现当鼠标进入热点区后,形状变为沙漏状。本文中的程序仅为演示程序,在实际应用中,可以事先创建好热点区数组,然后在热点区的MouseDown()事件中添入相应的代码,即可使用图形热点代替命令按钮。
  本程序在VB5/Win95、Win98下通过。->

来源:https://www.tulaoshi.com/n/20160219/1612412.html

延伸阅读
在VISUALBASIC中没有什么命令或函数能够实现将一个位图旋转一个角度后显示出来,但我们可以用画点的方式,将一个图画盒中的位图中的像素点旋转一个角度后画入另一个图画盒中,当源图画盒中的像素都被画到目标图画盒中时,也就完成了位图的旋转。这里主要用到了VISUALBASIC中的两个方法:POINT方法和PSET方法。POINT方法的作用是从源图画盒中提取...
标签: 鸡蛋 蛋黄 饼干
岩石饼干 1.黄油在室温下软化到20度左右,加入糖粉 2.低筋面粉加泡打粉混合过筛 3.黄油先用手动打蛋器搅拌均匀,然后再打至膨松 4.加入室温下的蛋黄一个,打至混合均匀 5.黄油中倒入过筛好的低筋面粉 6.杏仁切成碎粒 7.低筋面粉和黄油混合好后,加入杏仁粒 8.混合均匀后,分成20个份量相等的小饼干坯,分布在铺有油纸的烤盘上,烤箱...
Win32API有很多让你意想不到的功能。要创建特殊的不规则窗口看上去似乎很难。但我们如果我们说我们用几行代码就可以实现,这似乎不可思议。但事实就是如此!请试试: PrivateDeclareFunctionCreateEllipticRgnLib"gdi32"(ByValX1AsLong,ByValY1AsLong,ByValX2AsLong,ByValY2AsLong)AsLong PrivateDeclareFunctionSetWindowRgn...
意大利饼干:baci di dama 1.将杏仁倒入煮热的开水里,煮几分钟,然后倒出,剥皮。放入平底锅将杏仁炒成带金黄色,但不可以炒焦。(也可以买已经炒过的杏仁,节省时间吗。) 2.将炒好的杏仁搅碎,加入50克的白糖。 3.将搅碎的杏仁倒入稍大的碗里,加入面粉,剩余的白糖,软化的黄油然后一起和成均匀的面团。 4.将面团用保鲜膜包好放到冰...
标签: 鸡蛋 蛋黄 饼干
笑娃娃饼干 1.黄油切丁放入干净的盆子里室温软化后(能轻易的用手戳出一个小洞的程度)搅打均匀,再加糖粉搅打均匀 2.分次加入蛋黄液搅打均匀 3.加入几滴香草精搅打均匀 4.加入过筛的低粉和盐拌匀成黄油面团后,分块压扁裹入保鲜膜或保鲜袋放冰箱冷藏30分钟 5.将变硬的面团在案板上洒许高筋粉(防止粘牢,中筋粉也可以),擀成3mm左右...

经验教程

367

收藏

87
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部