• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    很酷的透明窗體

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 22次 | 進入軟件測試論壇討論

    領測軟件測試網 一個Form1,圖片框一個PicShape,在圖片框內放置任何圖片時,系統將使用圖片框中的圖片為窗體,并且屏蔽圖片中白色部分,從而建立特效的變形窗體。  

    Option Explicit

    Dim MoveTrue As Boolean, OldX As Long, OldY As Long

    Private Type BITMAP
        bmType As Long
        bmWidth As Long
        bmHeight As Long
        bmWidthBytes As Long
        bmPlanes As Integer
        bmBitsPixel As Integer
        bmBits As Long
    End Type

    Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
    Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Declare Function CreateRectRgn Lib "gdi32" (ByVal x1 As Long, ByVal y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

    Private Sub FitToPicture()
    Const RGN_OR = 2

    Dim border_width As Single
    Dim title_height As Single
    Dim bm As BITMAP
    Dim bytes() As Byte
    Dim ints() As Integer
    Dim longs() As Long
    Dim R As Integer
    Dim C As Integer
    Dim start_c As Integer
    Dim stop_c As Integer
    Dim x0 As Long
    Dim y0 As Long
    Dim combined_rgn As Long
    Dim new_rgn As Long
    Dim offset As Integer
    Dim colourDepth As Integer

    ScaleMode = vbPixels

    picShape.ScaleMode = vbPixels
    picShape.AutoRedraw = True
    picShape.Picture = picShape.Image

    注釋: 獲取窗體的邊框大小
    border_width = (ScaleX(Width, vbTwips, vbPixels) - ScaleWidth) / 2
    title_height = ScaleX(Height, vbTwips, vbPixels) - border_width - ScaleHeight

    注釋: 獲取圖片大小
    x0 = picShape.Left + border_width
    y0 = picShape.Top + title_height

    注釋:給出圖片信息
    GetObject picShape.Image, Len(bm), bm
    Select Case bm.bmBitsPixel
    Case 15, 16:
    注釋:MsgBox _
    "圖片框中圖片的顏色大高。",vbExclamation + vbOKOnly

    colourDepth = 2

    注釋: 分配空格給圖片.
    ReDim ints(0 To bm.bmWidthBytes \ 2 - 1, 0 To bm.bmHeight - 1)
    注釋: 給出圖片表面數據
    GetBitmapBits picShape.Image, bm.bmHeight * bm.bmWidthBytes, ints(0, 0)

    注釋: 建立表單區域
    For R = 0 To bm.bmHeight - 2

    C = 0
    Do While C < bm.bmWidth
    start_c = 0
    stop_c = 0

    注釋: 查找白色區域,屏蔽
    Do While C < bm.bmWidth
    If (ints(C, R) And &H7FFF) <> &H7FFF Then Exit Do
    C = C + 1
    Loop
    start_c = C

    Do While C < bm.bmWidth
    If (ints(C, R) And &H7FFF) = &H7FFF Then Exit Do
    C = C + 1
    Loop
    stop_c = C

    If start_c < bm.bmWidth Then
    If stop_c >= bm.bmWidth Then stop_c = bm.bmWidth - 1

    new_rgn = CreateRectRgn(start_c + x0, R + y0, stop_c + x0, R + y0 + 1)

    If combined_rgn = 0 Then
    combined_rgn = new_rgn
    Else
    CombineRgn combined_rgn, combined_rgn, new_rgn, RGN_OR
    DeleteObject new_rgn
    End If
    End If
    Loop
    Next R

    Case 24:
    colourDepth = 3

    ReDim bytes(0 To bm.bmWidthBytes - 1, 0 To bm.bmHeight - 1)

    GetBitmapBits picShape.Image, bm.bmHeight * bm.bmWidthBytes, bytes(0, 0)

    For R = 0 To bm.bmHeight - 2
    注釋: Create a region for this row.
    C = 0
    Do While C < bm.bmWidth
    start_c = 0
    stop_c = 0

    offset = C * colourDepth

    Do While C < bm.bmWidth
    If bytes(offset, R) <> 255 Or _
    bytes(offset + 1, R) <> 255 Or _
    bytes(offset + 2, R) <> 255 Then Exit Do
    C = C + 1
    offset = offset + colourDepth
    Loop
    start_c = C

    Do While C < bm.bmWidth
    If bytes(offset, R) = 255 And _
    bytes(offset + 1, R) = 255 And _
    bytes(offset + 2, R) = 255 _
    Then Exit Do
    C = C + 1
    offset = offset + colourDepth
    Loop
    stop_c = C

    If start_c < bm.bmWidth Then
    If stop_c >= bm.bmWidth Then stop_c = bm.bmWidth - 1

    注釋: 建立區域
    new_rgn = CreateRectRgn(start_c + x0, R + y0, stop_c + x0, R + y0 + 1)

    If combined_rgn = 0 Then
    combined_rgn = new_rgn
    Else
    CombineRgn combined_rgn, combined_rgn, new_rgn, RGN_OR
    DeleteObject new_rgn
    End If
    End If
    Loop
    Next R

    Case 32:
    colourDepth = 4

    ReDim longs(0 To bm.bmWidthBytes \ 4 - 1, 0 To bm.bmHeight - 1)

    GetBitmapBits picShape.Image, bm.bmHeight * bm.bmWidthBytes, longs(0, 0)


    For R = 0 To bm.bmHeight - 2

    C = 0
    Do While C < bm.bmWidth
    start_c = 0
    stop_c = 0

    Do While C < bm.bmWidth
    If (longs(C, R) And &HFFFFFF) <> &HFFFFFF Then Exit Do
    C = C + 1
    Loop
    start_c = C

    Do While C < bm.bmWidth
    If (longs(C, R) And &HFFFFFF) = &HFFFFFF Then Exit Do
    C = C + 1
    Loop
    stop_c = C

    If start_c < bm.bmWidth Then
    If stop_c >= bm.bmWidth Then stop_c = bm.bmWidth - 1

    new_rgn = CreateRectRgn(start_c + x0, R + y0, stop_c + x0, R + y0 + 1)

    If combined_rgn = 0 Then
    combined_rgn = new_rgn
    Else
    CombineRgn combined_rgn, combined_rgn, new_rgn, RGN_OR
    DeleteObject new_rgn
    End If
    End If
    Loop
    Next R

    Case Else
    MsgBox "對不起,程序必須在 16位, 24-位 或 32-位 顏色下。", _
    vbExclamation + vbOKOnly

    Exit Sub
    End Select

    注釋: 設置表單外觀為建立區域
    SetWindowRgn hWnd, combined_rgn, True
        DeleteObject combined_rgn
    End Sub

    Private Sub picShape_Click()

    End Sub

    Private Sub Form_Load()

    Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2

    FitToPicture

    End Sub

    Private Sub picShape_DblClick()

    Unload Me

    End Sub

    Private Sub picshape_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    MoveTrue = True
    OldX = x: OldY = y
    End Sub

    Private Sub picshape_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

    If MoveTrue = True Then
    Form1.Left = Form1.Left + x - OldX
    Form1.Top = Form1.Top + y - OldY
    End If

    End Sub

    Private Sub picshape_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

    MoveTrue = False

    End Sub

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>