Im Internet gibt es seit langem Diskussionen über die Implementierung des XP-Stils durch Programmierung, aber es gibt keine perfekte Lösung für die Implementierung des XP-Stils durch VB-Programmierung. Der Autor enthüllte schließlich das Geheimnis durch N Tage und Nächte intensiven Lernens. Das Folgende ist in drei Aspekte unterteilt, die wir mit Ihnen teilen möchten.
Klicken Sie hier, um die Quellcodedatei herunterzuladen
eins. Verwenden von Manifestdateien, um den XP-Stil zu erreichen
Unter normalen Umständen weist in Windows XP-Systemen nur die Fenstertitelleiste einer mit VB6 entwickelten Anwendung den XP-Stil auf, und die Schaltflächen, Textfelder und anderen Steuerelemente im Formular zeigen weiterhin den traditionellen Windows-Stil an. Wie in Abbildung 1 dargestellt:
Durch Konsultieren des Kapitels „Visueller Stil“ in MSDN wissen wir, dass Windows XP Comctl32.dll (Version 6) verwendet, um Komponenten im XP-Stil zu laden, und die Anwendung benachrichtigt das System über eine XML-Ressourcendatei, um dies zu tun. Der Inhalt der XML-Datei ist wie folgt:
<?xml version=1.0 binding=UTF-8 standalone=yes?>
<assembly xmlns=urn:schemas-microsoft-com:asm.v1 manifestVersion=1.0>
<assemblyIdentity
name=Manifest im XP-Stil
Prozessorarchitektur = x86
Version=1.0.0.0
type=win32/>
<Abhängigkeit>
<dependentAssembly>
<assemblyIdentity
Typ=win32
name=Microsoft.Windows.Common-Controls
Version=6.0.0.0
Prozessorarchitektur = x86
publicKeyToken=6595b64144ccf1df
Sprache=*
/>
</dependentAssembly>
</Abhängigkeit>
</Montage>
Gehen Sie davon aus, dass der Name Ihres endgültig kompilierten Programms abc.exe lautet und das Arbeitsverzeichnis d:/vbxp lautet. Kopieren Sie den obigen XML-Inhalt und speichern Sie ihn als Textdatei. Benennen Sie dann die Datei abc.exe.manifest um (beachten Sie, dass die Erweiterung .txt entfernt werden sollte). Im VB-Programm müssen wir die Funktion InitCommonControlsEx aufrufen, um die Komponentenklasse von comctl32.dll (Version 6) zu initialisieren, bevor alle Formulare geladen werden. Die API-Funktion InitCommonControlsEx und zugehörige Konstanten und Datentypen werden wie folgt deklariert:
Private Deklarationsfunktion InitCommonControlsEx Lib comctl32.dll _
(iccex als tagInitCommonControlsEx) als boolescher Wert
Privater Typ tagInitCommonControlsEx
lngSize As Long
lngICC So lange
Endtyp
Private Const ICC_USEREX_CLASSES = &H200
Hier schreiben wir eine Funktion, um den Initialisierungsvorgang zu kapseln:
Öffentliche Funktion InitCommonControlsVB() als boolescher Wert
Bei Fehler Weiter fortsetzen
Iccex als tagInitCommonControlsEx dimmen
Mit Iccex
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
Ende mit
InitCommonControlsEx iccex
InitCommonControlsVB = (Err.Number = 0)
Bei Fehler Gehe zu 0
Funktion beenden
Beachten Sie, dass die Initialisierungsaktion abgeschlossen sein muss, bevor alle Formulare geladen sind. Daher müssen die relevanten Anweisungen in Sub Main() platziert werden und das Projekt muss von Sub Main() aus gestartet werden. Der Code lautet wie folgt:
Sub Main()
InitCommonControlsVB
Form1.Show
Sub beenden
An diesem Punkt wird Ihre kompilierte abc.exe den XP-Stil haben, wie in Abbildung 2 dargestellt: