自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

兩個(gè)實(shí)例了解VB.NET特殊形狀窗體

開發(fā) 后端
這里介紹們的目的是實(shí)現(xiàn)VB.NET特殊形狀窗體,VB6中實(shí)現(xiàn)做一個(gè)古怪的窗口必須要用的也是此程序中最重要的一個(gè)函數(shù)就是SetWindowRgn它的功能就是對(duì)指定的窗口進(jìn)行重畫,把這個(gè)窗口你選擇的部分留下其余的部分抹掉。

#t#本人很喜歡VB.NET,在工作中也很喜歡總結(jié)關(guān)于VB.NET特殊形狀窗體的經(jīng)驗(yàn)教訓(xùn),下面就這個(gè)問題來詳細(xì)說說吧。我們的目的是實(shí)現(xiàn)VB.NET特殊形狀窗體,VB6中實(shí)現(xiàn)(借助API函數(shù))做一個(gè)古怪的窗口必須要用的也是此程序中最重要的一個(gè)函數(shù)就是SetWindowRgn它的功能就是對(duì)指定的窗口進(jìn)行重畫,把這個(gè)窗口你選擇的部分留下其余的部分抹掉。

VB.NET特殊形狀窗體參數(shù):
◆hWnd:你所要重畫的窗口的句柄,比如你想重畫form1則應(yīng)該讓此參數(shù)為form1.hWnd
◆hRgn:你要保留的區(qū)域的句柄,這個(gè)句柄是關(guān)鍵,你需要通過別的渠道來獲得在這里的區(qū)域是由Combinergn合成的新區(qū)域
◆bRedram:是否要馬上重畫,一般設(shè)為true
◆函數(shù)CombineRgn將兩個(gè)區(qū)域組合為一個(gè)新區(qū)域
◆函數(shù)Createrectrgn為創(chuàng)建一個(gè)由點(diǎn)X1,Y1和X2,Y2描述的矩形區(qū)域
◆函數(shù)CreateEllipticRgn為創(chuàng)建一個(gè)X1,Y1和X2,Y2的橢圓區(qū)域用DeleteObject這個(gè)函數(shù)可刪除GDI對(duì)象,比如畫筆、刷子、字體、位圖、區(qū)域以及調(diào)色板等等。對(duì)象使用的所有系統(tǒng)資源都會(huì)被釋放。

以下是VB6的代碼:

  1. PrivateDeclareFunction CreateEllipticRgn Lib "gdi32" (ByVal X1 AsLong, 
    ByVal Y1 AsLong, ByVal X2 AsLong, ByVal Y2 AsLong) AsLong  
  2. PrivateDeclareFunction CreateRectRgn Lib "gdi32" (ByVal X1 AsLong, 
    ByVal Y1 AsLong, ByVal X2 AsLong, ByVal Y2 AsLong) AsLong  
  3. PrivateDeclareFunction CombineRgn Lib "gdi32" (ByVal hDestRgn AsLong, 
    ByVal hSrcRgn1 AsLong, ByVal hSrcRgn2 AsLong, ByVal nCombineMode AsLong) AsLong  
  4. PrivateDeclareFunction SetWindowRgn Lib "user32" (ByVal hWnd AsLong, 
    ByVal hRgn AsLong, ByVal bRedraw AsBoolean) AsLong  
  5. PrivateDeclareFunction DeleteObject Lib "gdi32" (ByVal hObject AsLong) AsLong  
  6. PrivateConst RGN_DIFF = 4 
  7.  
  8. PrivateSub Form_Load()  
  9. Dim rgn AsLong  
  10. Dim rgnRect AsLong  
  11. Dim rgnDest AsLong  
  12.  
  13. rgn = CreateEllipticRgn(0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY)  
  14. rgnRect = CreateRectRgn((Me.Width / Screen.TwipsPerPixelX - 20) / 2, 
    (Me.Height / Screen.TwipsPerPixelY - 20) / 2, (Me.Width / Screen.TwipsPerPixelX + 20) / 2, 
    (Me.Height / Screen.TwipsPerPixelY + 20) / 2)  
  15. rgnDest = CreateRectRgn(0, 0, 1, 1)  
  16. CombineRgn rgnDest, rgn, rgnRect, RGN_DIFF  
  17. SetWindowRgn Me.hWnd, rgnDest, True  
  18. Call DeleteObject(rgnRect)  
  19. Call DeleteObject(rgnDest)  
  20. EndSub  
  21.  
  22. PrivateSub Command1_Click()  
  23. End  
  24. EndSub 

在VB.NET中,我們可以使用.NET 框架類庫System.Drawing.Drawing2D的GraphicsPath 類(應(yīng)用程序使用路徑來繪制形狀的輪廓、填充形狀內(nèi)部和創(chuàng)建剪輯區(qū)域),來繪制圖形,然后通過VB.NET特殊形狀窗體的Me.Region來設(shè)置窗口的可見區(qū)域。

以下是VB.NET的代碼:

  1. '聲明一個(gè)布爾型變量,判斷窗體是否正常區(qū)域  
  2. Dim IsNormalRegion AsBoolean = True   
  3. PrivateSub Button2_Click(ByVal sender As System.Object, 
    _ByVal e As System.EventArgs) Handles Button2.Click  
  4. If (IsNormalRegion) Then  
  5. '構(gòu)造一個(gè)GraphicsPath對(duì)象實(shí)例  
  6. Dim Graphics AsNew System.Drawing.Drawing2D.GraphicsPath()  
  7. Dim intHeight AsInteger = Me.Size.Height  
  8. Dim intWidth AsInteger = Me.Size.Width  
  9. '定義內(nèi)矩形的左上角坐標(biāo)  
  10. Dim RectTop AsInteger = 100 
  11. '在窗體上繪制一個(gè)大橢圓,左上角的坐標(biāo)取為(0,0)  
  12. Graphics.AddEllipse(0, 0, intWidth, intHeight)  
  13. '再繪制一個(gè)小矩形  
  14. Dim AddRect AsNew Rectangle(RectTop, RectTop, 
    intHeight - (RectTop * 2), intHeight - (RectTop * 2))  
  15. Graphics.AddRectangle(AddRect)  
  16. '設(shè)置窗口的可見區(qū)域  
  17. Me.Region = New Region(Graphics)  
  18. Else  
  19. Me.Region = Nothing 
  20. EndIf  
  21. IsNormalRegion = Not IsNormalRegion  
  22. EndSub 
責(zé)任編輯:佚名 來源: 博客
相關(guān)推薦

2010-01-11 15:12:30

VB.NET特殊窗體

2009-11-03 17:31:01

VB.NET窗體

2010-01-11 15:31:04

VB.NET拖動(dòng)窗體

2009-04-30 13:24:45

VB.NET 2008窗體應(yīng)用實(shí)例

2009-10-14 13:56:05

VB.NET數(shù)據(jù)窗體

2010-01-13 09:31:39

VB.NET窗體打印

2009-10-16 09:35:24

VB.NET制作透明窗

2009-10-09 16:54:03

VB.NET窗體

2009-10-14 15:20:21

VB.NET窗體指針

2009-10-14 15:34:29

VB.NET窗體編程模

2010-01-20 17:54:13

VB.NET特殊字符

2009-10-26 17:53:50

VB.NET新窗體

2010-01-13 15:52:59

VB.NET浮動(dòng)窗體

2009-11-10 15:07:11

VB.NET窗體

2009-10-28 13:23:52

VB.NET可選參數(shù)

2009-10-29 14:04:48

VB.NET Deri

2009-11-02 10:42:04

VB.NET EXCE

2009-10-30 13:31:06

VB.NET名空間

2009-10-14 14:50:16

VB6.0VB.NET

2009-11-03 17:35:05

VB.NET窗體透明度
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)