【正文】
_II a, b, c, d, x(k + 8), S41, amp。H6FA87E4Fmd5_II d, a, b, c, x(k + 15), S42, amp。HFE2CE6E0md5_II c, d, a, b, x(k + 6), S43, amp。HA3014314md5_II b, c, d, a, x(k + 13), S44, amp。H4E0811A1md5_II a, b, c, d, x(k + 4), S41, amp。HF7537E82md5_II d, a, b, c, x(k + 11), S42, amp。HBD3AF235md5_II c, d, a, b, x(k + 2), S43, amp。H2AD7D2BBmd5_II b, c, d, a, x(k + 9), S44, amp。HEB86D391a = AddUnsigned(a, AA)b = AddUnsigned(b, BB)c = AddUnsigned(c, CC)d = AddUnsigned(d, DD)Next‘MD5 = LCase(WordToHex(a) amp。 WordToHex(b) amp。 WordToHex(c) amp。 WordToHex(d))MD5=LCase(WordToHex(b) amp。 WordToHex(c)) ‘I crop this to fit 16byte database password End Function軟件使用3VB創(chuàng)建不規(guī)則窗體經(jīng)驗(yàn)總匯[ 程序樂園 ] 很多人都很熱衷于創(chuàng)建形狀奇怪的窗體。而且不斷的有熱心的家伙們將他們的發(fā)現(xiàn)放到我們這里與大家分享。今天我將我所知道的方法總結(jié)一下。希望對(duì)大家有所幫助。一般來說,要?jiǎng)?chuàng)建一個(gè)不規(guī)則的窗體。我們需要使用一個(gè)Win32 API: SetwindowRgn。這個(gè)API您可以在Api瀏覽器中找到。這個(gè)Api的作用就是將窗體的“剪”成一個(gè)指定的形狀。下面是這個(gè)Api聲明于解釋:Declare Function SetWindowRgn Lib “user32″ (ByVal hwnd As Long,ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long它有三個(gè)參數(shù)。第一個(gè)(hWnd)是用來指定被剪切的對(duì)象的句柄,比如Picture圖形框等, 我們一般就是用窗體的hWnd屬性;第二個(gè)(hRgb)指明剪切的形狀, 即指定的幾何圖形特征, 此參數(shù)也必須由相應(yīng)的API 函數(shù)提供說明。用那些APi可以創(chuàng)建一個(gè)您想要的區(qū)域(窗體的形狀)。然后這些Api會(huì)返回一個(gè)數(shù)值。這個(gè)數(shù)值就是這個(gè)形狀在Windows中的句柄(可以理解為身份證號(hào)碼)。SetWindowsRgn可以通過這個(gè)數(shù)值來找到我們創(chuàng)建的那個(gè)區(qū)域;第三個(gè)(bRedraw)是一個(gè)布爾變量, 一般可設(shè)置為真(True)。看來僅僅有SetWindowsRgn還不行。我們還必須創(chuàng)建一個(gè)區(qū)域。創(chuàng)建區(qū)域可以使用如下的一些Api:CreateRectRgn : 建立矩形區(qū)域,其參數(shù)分別為矩形的左上角坐標(biāo)及右下角坐標(biāo)。但是由于窗體默認(rèn)就是一個(gè)矩形,所我們應(yīng)該用不到它。CreateRoundRectRgn:建立圓角矩形區(qū)域,其參數(shù)分別為左上角及右下角坐標(biāo), 還有圓角直徑等, 當(dāng)圓角直徑接近或超過矩形的長(zhǎng)度時(shí), 將呈現(xiàn)為圓或橢圓形。CreateEllipticRgn :建立橢圓矩形區(qū)域,參數(shù)分別橢圓的約束矩形左上角與左下角頂點(diǎn)的坐標(biāo);。所以現(xiàn)在我們就可以創(chuàng)建一下形狀比較簡(jiǎn)單的窗體了。比如下面的代碼我們就創(chuàng)建了一個(gè)橢圓形的窗體:Option Explicit’Win32 Api 的聲名Private Declare Function CreateEllipticRgn Lib “gdi32″ Alias “CreateEllipticRgn” (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function SetWindowRgn Lib “user32″ (ByVal hwnd As Long,ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPrivate Sub Form_Load()Dim Result As Long ‘聲明變量用于保存“區(qū)域”的句柄Result = CreateEllipticRgn(0, 0, 300, 200) ‘創(chuàng)建“區(qū)域”并將其句柄保存到變量中SetWindowRgn , Result, True ‘根據(jù)前面創(chuàng)建的區(qū)域?qū)Υ绑w進(jìn)行“剪裁”End Sub 但是你要說,我想創(chuàng)建的窗體是一個(gè)人的形狀或者是其他的不規(guī)則的形狀呀!是的,上面的方法只能創(chuàng)建一些簡(jiǎn)單的幾何圖形。創(chuàng)建比較復(fù)雜形狀的窗體我們?nèi)匀恍枰褂肧etWindowRgb這個(gè)Api來對(duì)窗體進(jìn)行“剪裁”。但是我們需要用其它的Api來創(chuàng)建復(fù)雜的“區(qū)域”。一般的,我們會(huì)用到下面的Api。這些Api配合使用就會(huì)得到復(fù)雜形狀的區(qū)域。從而我們可以使用SetWindowRgb裁出窗體。CreatePolygonRgn : 用于通過連接各個(gè)點(diǎn)來創(chuàng)建一個(gè)區(qū)域CombineRgn:用于對(duì)兩個(gè)區(qū)域進(jìn)行運(yùn)算。比如合并兩個(gè)區(qū)域或這是將兩個(gè)區(qū)域相減、求交集等等。下面我們來詳細(xì)的介紹一下這兩個(gè)Api:CreatePolygonRgbDeclare Function CreatePolygonRgn Lib “gdi32″ Alias “CreatePolygonRgn” (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long 參數(shù)一(lpPoint): POINTAPI類型的變量。POINTAPI是一個(gè)用于描述點(diǎn)坐標(biāo)的結(jié)構(gòu)。他有兩個(gè)成員x與y。您可以在Api瀏覽器中找到它。在這里我們需要一個(gè)數(shù)組,并將這個(gè)屬組的第一個(gè)元素作為這里的參數(shù)。 參數(shù)二(nCount):區(qū)域頂點(diǎn)的個(gè)數(shù)。比如一個(gè)三角形的區(qū)域有三個(gè)頂點(diǎn)。我們應(yīng)該根據(jù)這個(gè)參數(shù)來確定上一個(gè)參數(shù)使用的數(shù)組的大?。?參數(shù)三(nPolyFillMode): 指定區(qū)域的填充模式。我們可以使用兩個(gè)常量作為參數(shù):AlterNATE和WINDING。這兩個(gè)常量可以在Api瀏覽器中找到。我們?cè)谶@里可以直接使用1. CombineRgb Declare Function CombineRgn Lib “gdi32″ Alias “CombineRgn” (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long 參數(shù)一(hDestRgn): 目標(biāo)區(qū)域的句柄; 參數(shù)二(hSrcRgn1): 源區(qū)域一的句柄; 參數(shù)三(hScrRgn2): 源區(qū)域二的句柄。 參數(shù)四(nCombineMode): 合并模式。我們可以在Api瀏覽器中到這些常量作為它的參數(shù):RGN_AND Creates the intersection of the two bined regions.RGN_COPY Creates a copy of the region identified by hrgnSrc1.RGN_DIFF Combines the parts of hrgnSrc1 that are not part of hrgnSrc2.RGN_OR Creates the union of two bined regions.RGN_XOR Creates the union of two bined regions except for any overlapping areas.好了,下面我們來創(chuàng)建一個(gè)沙漏形的區(qū)域。 Option Explicit’Win32 API的聲明Private Declare Function CreatePolygonRgn Lib “gdi32″ (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As LongPrivate Declare Function CreateEllipticRgn Lib “gdi32″ (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function SetWindowRgn Lib “user32″ (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPrivate Type POINTAPIx As Longy As Long End TypePrivate Sub Form_Load()’聲明變量Dim Result As LongDim Points(5) As POINTAPI’更改窗體大小With Me.Width = 5000.Height = 10000End With’將區(qū)域的頂點(diǎn)坐標(biāo)存入變量Points(0).x = 0Points(0).y = 0Points(1).x = 300Points(1).y = 0Points(2).x = 175Points(2).y = 300Points(3).x = 300Points(3).y = 600Points(4).x = 0Points(4).y = 600Points(5).x = 125Points(5).y = 300’創(chuàng)建區(qū)域Result = CreatePolygonRgn(Points(0), 6, 1)’“裁剪”窗體SetWindowRgn , Result, TrueEnd Sub