⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmregion.bas

📁 一个clock的 vb 源码
💻 BAS
字号:
Attribute VB_Name = "frmRegion"
Option Explicit

Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDc As Long) As Long

Public BmpObject As BITMAP
Public hDcMem As Long, hDcMemt As Long
Private hBmp As Long, hBmpt As Long

Public Sub AppInitialize(hWnd As Long)
    Dim StrPath As String
    Dim BmpBackFile As String, BmpTimeFile As String
    
    Call ShowWindow(hWnd, SW_HIDE)
        
    StrPath = GetKeyValue(HKEY_CURRENT_USER, "Software\Alarm Clock\Option", "SkinPath")

    BmpBackFile = StrPath & "\" & GetKeyValue(HKEY_CURRENT_USER, "Software\Alarm Clock\Load", "BmpBack")
    BmpTimeFile = StrPath & "\" & GetKeyValue(HKEY_CURRENT_USER, "Software\Alarm Clock\Load", "BmpTime")
    
    ' 判断注册表的键值以及文件是否存在
    ' 由于 LoadResImage 函数的原因不能在 VB 中进行调试
    If BmpBackFile <> "\" And (Dir(BmpBackFile) <> "") Then
        hBmp = LoadImage(0, BmpBackFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
            If hBmp = 0 Then   ' 判断图片格式
                Call MessageBox(hWnd, "您可能使用了非位图格式的图片来用作程序的外观图片,单击确定" & vbCrLf & "按钮可以忽略此错误。", "未知的图片格式", MB_ICONEXCLAMATION)
                hBmp = LoadResImage(App.hInstance, 2, IMAGE_BITMAP, 0, 0, 0)
            End If
    Else
        hBmp = LoadResImage(App.hInstance, 2, IMAGE_BITMAP, 0, 0, 0)
    End If
    
    If BmpTimeFile <> "\" And (Dir(BmpTimeFile) <> "") Then
        hBmpt = LoadImage(0, BmpTimeFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
            If hBmpt = 0 Then
                Call MessageBox(hWnd, "您可能使用了非位图格式的图片来用作程序的外观图片,单击确定" & vbCrLf & "按钮可以忽略此错误。", "未知的图片格式", MB_ICONEXCLAMATION)
                hBmpt = LoadResImage(App.hInstance, 3, IMAGE_BITMAP, 0, 0, 0)
            End If
    Else
        hBmpt = LoadResImage(App.hInstance, 3, IMAGE_BITMAP, 0, 0, 0)
    End If
        
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Call GetObjects(hBmp, Len(BmpObject), BmpObject)    ' 获取图片大小
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
End Sub
Public Sub SltBmphDc(hWnd As Long)
    If hDcMem <> 0 Then: Call DeleteDC(hDcMem)
    If hDcMemt <> 0 Then: Call DeleteDC(hDcMemt)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Dim hDc As Long
    hDc = GetDC(hWnd)
    hDcMem = CreateCompatibleDC(hDc)      ' 创建内存设备场景
    hDcMemt = CreateCompatibleDC(hDc)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Call SelectObject(hDcMem, hBmp)     ' 将取得的图片选入设备场景
    Call SelectObject(hDcMemt, hBmpt)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Call DeleteObject(hBmp)             ' 释放资源
    Call DeleteObject(hBmpt)
    Call ReleaseDC(hWnd, hDc)
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
End Sub

Public Sub SetPosition(hWnd As Long)
    '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Dim strLeft As String, strTop As String     ' 窗口的位置
    Dim DesktopRect As RECT, hWndDesktop As Long
    
    hWndDesktop = GetDesktopWindow
    GetWindowRect hWndDesktop, DesktopRect
    
    strLeft = GetKeyValue(HKEY_CURRENT_USER, "Software\Alarm Clock\Load", "ClockLeft")
    strTop = GetKeyValue(HKEY_CURRENT_USER, "Software\Alarm Clock\Load", "ClockTop")

    If strLeft <> "" And strTop <> "" And IsNumeric(strLeft) And IsNumeric(strTop) Then
        MoveWindow hWnd, CLng(strLeft), CLng(strTop), BmpObject.bmWidth, BmpObject.bmHeight, 1
    Else
        MoveWindow hWnd, (DesktopRect.Right - BmpObject.bmWidth) / 2, (DesktopRect.Bottom - BmpObject.bmHeight) / 2, BmpObject.bmWidth, BmpObject.bmHeight, 1
    End If
    
End Sub

Public Function SetfrmRgn(hWnd As Long, hDcMem As Long, frmWidth As Long, frmHeight As Long) As Long
    '----------------------------------------------------
    ' 这是一个图片引擎(它可将窗体的形状设置为图片的形状)
    ' 适用于Windows 98 及 Windows Me
    '----------------------------------------------------
    Dim X As Long, Y As Long, BeginLine As Long, hdestrgn As Long
    Dim First As Boolean, InLine As Boolean
    Dim hRgn As Long, Color As Long
    First = Not False

    '----------------------------------------------------------
    Color = GetPixel(hDcMem, 0, 0)

        For Y = 0 To frmHeight
        For X = 0 To frmWidth
    
            If GetPixel(hDcMem, X, Y) = Color Or X = frmWidth Then
            If InLine Then
                InLine = False
                hRgn = CreateRectRgn(BeginLine, Y, X, Y + 1)
                    If First Then
                        hdestrgn = hRgn
                        First = False
            Else
                CombineRgn hdestrgn, hdestrgn, hRgn, RGN_OR
                DeleteObject hRgn
            End If
            End If
            Else
                If Not InLine Then
                    InLine = True
                    BeginLine = X
                End If
            End If
        Next X
        Next Y
    '--------------------------------------------------------
    If SetfrmRgn <> 0 Then: Call SetWindowRgn(hWnd, 0, True)
    SetfrmRgn = SetWindowRgn(hWnd, hdestrgn, True)
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -