📜  Windows 窗体深色标题栏 - VBA (1)

📅  最后修改于: 2023-12-03 15:21:11.101000             🧑  作者: Mango

Windows 窗体深色标题栏 - VBA

在Windows 10操作系统中,微软引入了深色主题,使得用户可以更加舒适地在夜间使用计算机。但是,如果你对VBA编程进行了扩展,那么可能会注意到VBA用户界面的标题栏是白色的,没有办法与深色主题协调一致。

在本文中,我们将介绍如何在VBA中创建一个深色标题栏,并在Windows 10的深色主题下运行VBA程序。我们将通过一个示例程序来演示如何实现深色标题栏。

示例程序

以下是一个基本的VBA程序,它创建一个Windows窗口。但是,在Windows 10的深色主题下,这个程序的标题栏将是白色的,这看起来并不协调一致。

Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Private Const SW_SHOWNORMAL = 1
Private Const WS_OVERLAPPEDWINDOW = &HCF0000
Private Const WS_VISIBLE = &H10000000

Public Sub Form_Load()
    Dim hWnd As Long
    
    hWnd = CreateWindowEx(0, "STATIC", "VBA Window", WS_OVERLAPPEDWINDOW Or WS_VISIBLE, 100, 100, 400, 300, 0, 0, App.hInstance, ByVal 0&)
    
    ShowWindow hWnd, SW_SHOWNORMAL
End Sub
实现深色标题栏

为了实现深色标题栏,我们需要使用Windows API函数SetWindowTheme。这个函数允许我们为窗口指定视觉主题。

Private Declare Function SetWindowTheme Lib "uxtheme" (ByVal hWnd As Long, ByVal pszSubAppName As String, ByVal pszSubIdList As String) As Long

在VBA程序中,我们可以使用SetWindowTheme函数来将窗口主题设置为深色。下面是修改过的Form_Load过程。

Public Sub Form_Load()
    Dim hWnd As Long
    
    hWnd = CreateWindowEx(0, "STATIC", "VBA Window", WS_OVERLAPPEDWINDOW Or WS_VISIBLE, 100, 100, 400, 300, 0, 0, App.hInstance, ByVal 0&)
    
    SetWindowTheme hWnd, "DarkMode_Explorer", Nothing
    
    ShowWindow hWnd, SW_SHOWNORMAL
End Sub

在上面的代码中,我们在创建窗口之后立即使用SetWindowTheme函数来将其主题设置为"DarkMode_Explorer"。这个主题是Windows 10深色主题的一部分,可以让我们的VBA程序看起来更加协调一致。

总结

在Windows 10深色主题中,白色标题栏可能会使VBA程序看起来不协调一致。通过使用SetWindowTheme函数,我们可以实现一个深色标题栏,帮助我们的VBA程序更好地融入到深色主题中。