程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB中不規則圖形熱點的實現

VB中不規則圖形熱點的實現

編輯:VB綜合教程
所謂圖形熱點就是指定圖形或圖像上的某部分區域,當鼠標在這部分區域上單擊或雙擊時,就像命令按鈕一樣會引發相應事件。筆者在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參數指出了邊界點的個數(如nCount<3時,將無法形成一個封閉區域),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下通過。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved