国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

VB中不規(guī)則圖形熱點(diǎn)的實(shí)現(xiàn)

2019-11-18 17:38:26
字體:
供稿:網(wǎng)友
所謂圖形熱點(diǎn)就是指定圖形或圖像上的某部分區(qū)域,當(dāng)鼠標(biāo)在這部分區(qū)域上單擊或雙擊時(shí),就像命令按鈕一樣會(huì)引發(fā)相應(yīng)事件。筆者在VB5中用Windows提供的三個(gè)API函數(shù)輕松實(shí)現(xiàn)了任何形狀的圖形熱點(diǎn),在此具體介紹這一技術(shù)的實(shí)現(xiàn)步驟。
  首先在VB5中新建一"標(biāo)準(zhǔn)EXE工程",設(shè)置窗體Form1的ScaleMode屬性為3。在窗體代碼的聲明部分定義如下三個(gè)API函數(shù):
  aspOINTAPI,ByValnCountAsLong,ByValnPolyFillModeAsLong)AsLong
  PrivateDeclareFunctionDeleteObjectLib"gdi32"(ByValhObjectAsLong)AsLong
  PrivateDeclareFunctionPtInRegionLib"gdi32"(ByValhRgnAsLong,ByValxAsLong,ByValyAsLong)AsLong
  函數(shù)說明:CreatePolygonRgn()函數(shù)是用來創(chuàng)建一個(gè)圖形熱點(diǎn)對(duì)象,lpPoint參數(shù)為形成圖形熱點(diǎn)區(qū)的第一個(gè)邊界點(diǎn)坐標(biāo),nCount參數(shù)指出了邊界點(diǎn)的個(gè)數(shù)(如nCount<3時(shí),將無法形成一個(gè)封閉區(qū)域),nPolyFillMode參數(shù)指定填充模式,該函數(shù)返回圖形熱點(diǎn)對(duì)象(Long型);DeleteObject()函數(shù)用來刪除一個(gè)由hObject參數(shù)指定的對(duì)象;PtInRegion()函數(shù)用來判斷某坐標(biāo)(由參數(shù)x、y指出)是否在hRgn圖形熱點(diǎn)對(duì)象指出的熱點(diǎn)區(qū)內(nèi),若是返回1,否則返回0。
  其次在申明部分再添入下列自定義變量:
  ConstMAXCOUNT=30'熱點(diǎn)區(qū)邊界點(diǎn)的最多個(gè)數(shù)
  DimRgnPt(MAXCOUNT)AsPOINTAPI'熱點(diǎn)數(shù)組
  DimRgnObject,RgnCount,flagAsLong
  然后在Form1窗體的上方創(chuàng)建一個(gè)PictureBox控件,設(shè)置名稱為P1,ScaleMode屬性為3,Picture屬性指定一幅BMP圖像。在P1的MouseMove事件和MouseDown事件中添入下列代碼:
  PrivateSubP1_MouseDown(buttonAsInteger,shiftAsInteger,xAsSingle,yAsSingle)
   Ifbutton=1Then'必須按下鼠標(biāo)左鍵才有效
    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="進(jìn)入圖形熱點(diǎn)區(qū)!鼠標(biāo)形狀變?yōu)樯陈睿?
    P1.MousePointer=11'設(shè)置鼠標(biāo)形狀為沙漏狀
   ElseIfflag=1Then
    Label1.ForeColor=0
    Label1.Caption="沒有進(jìn)入圖形熱點(diǎn)區(qū)!"
    P1.MousePointer=0
   EndIf
  EndSub
  接著在P1的下方并排創(chuàng)建兩個(gè)CommandButton控件,Caption屬性分別設(shè)為"創(chuàng)建熱點(diǎn)"和"使用熱點(diǎn)",名稱分別設(shè)為CrtRgn(對(duì)應(yīng)"創(chuàng)建熱點(diǎn)")和DspRgn。在這兩個(gè)命令按鈕的下方創(chuàng)建一個(gè)Label控件作為操作提示區(qū),取默認(rèn)名Label1,Caption屬性設(shè)為空,BackColor設(shè)為白色,BorderStyle屬性設(shè)為1,    "至少應(yīng)在不同位置單擊三次以上,否則形不成封閉區(qū)域!"
   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運(yùn)行后,首先單擊"創(chuàng)建熱點(diǎn)"按鈕,在圖像區(qū)域內(nèi)的不同位置單擊鼠標(biāo)左鍵,最好單擊三次以上,否則形不成熱點(diǎn)區(qū)。然后單擊"使用熱點(diǎn)"按鈕,在圖像框內(nèi)移動(dòng)鼠標(biāo),你會(huì)發(fā)現(xiàn)當(dāng)鼠標(biāo)進(jìn)入熱點(diǎn)區(qū)后,形狀變?yōu)樯陈睢1疚闹械某绦騼H為演示程序,在實(shí)際應(yīng)用中,可以事先創(chuàng)建好熱點(diǎn)區(qū)數(shù)組,然后在熱點(diǎn)區(qū)的MouseDown()事件中添入相應(yīng)的代碼,即可使用圖形熱點(diǎn)代替命令按鈕。
  本程序在VB5/Win95、Win98下通過。->


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 三原县| 陇南市| 宜兰县| 视频| 和田县| 澎湖县| 台山市| 五寨县| 沾益县| 瑞安市| 高密市| 焉耆| 本溪市| 洞口县| 石屏县| 万州区| 革吉县| 巫溪县| 安西县| 田东县| 枣阳市| 缙云县| 新建县| 邻水| 个旧市| 桂阳县| 庆阳市| 孟村| 安龙县| 永靖县| 台州市| 华亭县| 平塘县| 邢台市| 南丰县| 云南省| 三河市| 双牌县| 宁都县| 固安县| 广南县|