六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

如何在VB中完成繪圖區的大10字光標

[摘要]有時,我們需要用VB快速開發一個試驗數據繪圖處理程序,將繪圖控件內的鼠標光標改變成與AutoCAD軟件中使用的大十字光標的形式,將可以比普通的箭頭光標達到更好的效果。那么我們如何實現這樣的大十字光標呢? ---- 首先,我們明確一下要達到的效果,假若我們在一個Picture控件中繪圖,那么,鼠標移...
有時,我們需要用VB快速開發一個試驗數據繪圖處理程序,將繪圖控件內的鼠標光標改變成與AutoCAD軟件中使用的大十字光標的形式,將可以比普通的箭頭光標達到更好的效果。那么我們如何實現這樣的大十字光標呢?
---- 首先,我們明確一下要達到的效果,假若我們在一個Picture控件中繪圖,那么,鼠標移動到這個控件上時,鼠標光標立即改變為大十字形狀,光標中的橫線從控件的左邊界到右邊界,豎線從控件的上邊界到下邊界,即大十字光標將繪圖控件分割為四個象限。當鼠標移動到控件外時,光標則又恢復成原來的形式。

---- 要實現這樣的光標,得我們自己通過畫線的方式實現。如鼠標在繪圖控件內,先在鼠標的當前位置畫上光標的橫線和豎線;當鼠標位置移動,先擦除原先的光標橫線和豎線,然后再在新的位置畫光標的橫線和豎線,那么我們就要響應繪圖控件的MouseMove事件。當然,繪圖控件內無論有什么內容,我們擦除光標線和重畫光標線時都不能破壞原先的內容,因此我們要將繪圖控件的DrawMode設置為vbXorPen(異或方式),繪制光標的橫線和豎線時,用異或的方式將橫線和豎線的象素點顏色設為光標的顏色和原先的象素點色彩的異或值,再用異或的方式在同樣的位置繪制一遍豎線和橫線,橫線和豎線上的象素點再一次和光標顏色進行異或操作,就擦除了光標的橫線和豎線,且又恢復了繪圖控件內原先的內容。

---- 我們還得保證鼠標移動到繪圖控件內時,普通的鼠標光標消失,只有繪制的大十字光標出現,因此還應該設置繪圖控件的MousePointer屬性為vbCuntom,即用戶自定義。繪圖控件的MousePointer屬性設置為vbCustom后,其MouseIcon屬性中應裝入相應的用戶自定義圖形,因為我們希望繪圖控件內只有我們繪制的光標,而沒有其它的光標,故應該裝入一個空的(透明的)光標圖形。可以任找一個光標文件,通過任意一個資源編輯器對其進行編輯,用透明的方式填充整個光標圖形,保存成我們所需的NoIcon.cur即可。

---- 通過以上的關鍵設置和操作,我們就可以實現大十字光標了。利用異或方式進行繪圖,我們還可以實現一般繪圖軟件中常有的“橡皮筋”效果,即用鼠標定義一個點后,動態拖動鼠標來定義另外一個點,動態拖動鼠標過程中,所要繪的圖形也動態相應變化。

---- 以下我們通過一個示例來完整實現繪圖控件中的大十字光標,還演示如何實現用“橡皮筋”效果來畫矩形:

---- 在VB中新建一個標準EXE工程,在Form1中加入一個Picture控件,其Name設為PicDraw,可以裝入一個圖象文件,PicDraw的大小和其中的圖象大小基本上覆蓋大部分的Form1即可。實現代碼如下所示。此程序在VB5.0中運行通過。

Option Explicit
Private Old_X As Single
Private Old_Y As Single
Private isMouseDown As Boolean
Private Box_X0 As Single
Private Box_Y0 As Single
Private Box_X1 As Single
Private Box_Y1 As Single
Private PenColor As Long
Private CrossColor As Long

Private Sub Form_Load()
    CrossColor = QBColor(8)
    PenColor = QBColor(15)
    picDraw.DrawMode = vbXorPen
picDraw.MouseIcon = LoadPicture
(App.Path & "\no.cur")
    picDraw.MousePointer = vbCustom
    isMouseDown = False
    Box_X0 = Box_X1 = Box_Y0 = Box_Y1 = 0
End Sub

Private Sub picDraw_MouseDown
(Button As Integer,
Shift As Integer, X As Single, Y As Single)
If isMouseDown = True Then   
注釋:先前已經用鼠標定義了一個點
       Box_X1 = X
       Box_Y1 = Y
       isMouseDown = False
       picDraw.DrawMode = vbCopyPen
       picDraw.Line (Box_X0, Box_Y0)-
(Box_X1, Box_Y1),
PenColor, B
       picDraw.DrawMode = vbXorPen
       注釋:畫一個光標
   picDraw.Line (0, Y)-(picDraw.ScaleWidth, Y),
CrossColor
  picDraw.Line (X, 0)-(X, picDraw.ScaleHeight),
CrossColor
       Old_X = X
       Old_Y = Y
    Else
       注釋:定義了一個矩形的第一個頂點,則擦除光標
       picDraw.Line (0, Y)-(picDraw.ScaleWidth, Y),
CrossColor
       picDraw.Line (X, 0)-(X, picDraw.ScaleHeight),
CrossColor
       Box_X0 = X
       Box_Y0 = Y
       isMouseDown = True
    End If
End Sub

Private Sub picDraw_MouseMove(Button As Integer,
Shift As Integer, X As Single, Y As Single)
    If isMouseDown = True Then
       注釋:拖動鼠標來定義矩形的另外一個頂點,
此時擦除前一個矩形,繪制新的矩形
       picDraw.Line (Box_X0, Box_Y0)-(Old_X, Old_Y),
PenColor, B
       picDraw.Line (Box_X0, Box_Y0)-(X, Y), PenColor, B
    Else
       注釋:消除舊光標線
       picDraw.Line (0, Old_Y)-(picDraw.ScaleWidth, Old_Y),
CrossColor
       picDraw.Line (Old_X, 0)-(Old_X, picDraw.ScaleHeight),
CrossColor
       注釋:畫新的光標線
       picDraw.Line (0, Y)-(picDraw.ScaleWidth, Y),
CrossColor
       picDraw.Line (X, 0)-(X, picDraw.ScaleHeight),
CrossColor
    End If
    Old_X = X
    Old_Y = Y
End Sub


主站蜘蛛池模板: 五月激情视频 | 王者天下第五季在线观看 | 伊人网综合在线观看 | 一本久久精品一区二区 | 日韩美女中文字幕 | 日本一区二区三区国产 | 日本欧美不卡一区二区三区在线 | 亚洲国产三级在线观看 | 五月天激情开心网 | 天天干天天干天天干天天干 | 欧美亚洲国产日韩一区二区三区 | 在线九色 | 天天干天天草天天 | 欧美系列在线观看 | 在线播放精品一区二区啪视频 | 欧美性视频在线播放黑人 | 欧美中文字幕在线播放 | 色综合综合色综合色综合 | 做受又硬又粗又免费视频 | 亚洲精品视频在线观看你懂的 | 色综合久久伊人 | 日本青草视频 | 欧美婷婷色 | 综合欧美日韩 | 欧美视频高清 | 手机看片福利盒子久久 | 亚洲高清视频免费 | 无遮挡毛片a级武则天 | 日韩ab | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片免费看 | 四虎永久在线日韩精品观看 | 五月天婷婷免费观看视频在线 | 一级黄色大片免费 | 手机看片自拍 | 欧美中文字幕在线 | 五月婷婷深爱五月 | 青青国产成人精品视频 | 日韩中文字幕精品免费一区 | 欧美一区二区三区免费观看视频 | 我要色综合网 | 亚洲欧美自拍另类图片色 |