


Win32 SDK-Grundlagen (5) Eine kurze Einführung in die Fensterklasse
1. Einführung
Im vorherigen Artikel haben wir ein Fenster von Grund auf erstellt. Ein sehr wichtiger Schritt besteht darin, die Fensterklasse zu registrieren, z. B. den folgenden Code:
//注册窗口类 BOOL Register(LPSTR lpClassName, WNDPROC wndProc) { WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof(wce); wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wce.hCursor = NULL; wce.hIcon = NULL; wce.hIconSm = NULL; wce.hInstance = g_hInstance; wce.lpfnWndProc = wndProc; wce.lpszClassName = lpClassName; wce.lpszMenuName = NULL; wce.style = CS_HREDRAW | CS_VREDRAW; ATOM nAtom = RegisterClassEx(&wce); if (nAtom == 0) return FALSE; return true; }
Jedes Fenster unter Windows muss im System vorhanden sein, bevor es erstellt wird Wenn wir CreateWindowEx zum Erstellen eines Fensters verwenden, ist der Name des zweiten Parameters der Name der Fensterklasse. Dieser Name sollte innerhalb des für unseren Code sichtbaren Bereichs eindeutig sein. Dieser Artikel befasst sich hauptsächlich mit den Problemen von Fensterklassen unter Windows.
2. Fensterklassifizierung
Alle sichtbaren Elemente in Windows gehören grundsätzlich zu einem Fenster, unabhängig von seiner Form. Egal wie, es ist rund, quadratisch oder sogar unregelmäßig. Alle diese Fenster gehören zu einer bestimmten Fensterklasse. Im Allgemeinen werden Windows-Fensterklassen in drei Typen unterteilt:
(1) Systemfensterklasse
(2) Globale Fensterklasse
(3) Lokale Fensterklasse
Im Folgenden werde ich jeweils auf die Klassifizierung von Fensterklassen in Windows eingehen.
2.1 Systemfensterklasse
Eine -Schaltfläche und ein Bearbeitungsfeld, die wir alle haben Das Windows-Betriebssystem Die darin sichtbaren Steuerelemente sind eigentlich ein Fenster. Wenn wir das Betriebssystem installieren, registriert Windows eine große Anzahl von Fensterklassen auf Systemebene im Betriebssystem. Wenn wir entwickeln, können wir diese Fenster direkt basierend auf den Fensterklassennamen erstellen. Um dieses Problem zu erklären, führen wir den folgenden Code zusätzlich zum Code im vorherigen Artikel ein.
HWND CreateMain(LPSTR lpClassName, LPSTR lpWndName) { HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL); return hWnd; } int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { // TODO: Place code here. g_hInstance = hInstance; HWND hWnd = CreateMain("Button", "window"); Display(hWnd); Message(); return 0; }
CreateMain ist eine Funktion , die wir definiert haben, um ein Fenster zu erstellen. Es empfängt zwei Parameter: Der erste ist der registrierte Fensterklassenname und der zweite der Titel des Fensters. Im Gegensatz zum Code im vorherigen Artikel haben wir den Schritt der Registrierung eines benutzerdefinierten Fensters weggelassen. Stattdessen wird in der WinMain-Funktion CreateMain aufgerufen, um ein Fenster mit dem Fensterklassennamen „Button“ zu erstellen. Ich denke, Sie wissen bereits, was wir tun werden, oder? Ja, es soll eine Button-Schaltfläche generiert werden. Alle von uns häufig verwendeten Steuerelemente wurden vom Betriebssystem als Systemfensterklassen registriert und können direkt verwendet werden. Bitte sehen Sie sich die Ergebnisse des folgenden Programms an:
Sie können auch versuchen, eine Bearbeitung zu erstellen B. Dropdown-Boxen und andere Fenster auf Systemebene.
2.2 Globale Fensterklasse
Die globale Fensterklasse bezieht sich auf die Fensterklasse, die im globalen Bereich des verwendet werden kann Anmeldung nach Anmeldung. Beispielsweise können wir die globale Fensterklasse in der DLL registrieren, dann können alle Programme, die die DLL einführen, diese Klasse verwenden. Bei der Registrierung einer global verwendeten Fensterklasse müssen wir bei der Registrierung lediglich das CS_GLOBALCLASSAttribut zum Stilmitglied der Struktur von wec hinzufügen, wie folgt:
wce.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
Um dieses Problem zu überprüfen, fügen wir ein neues DLL-Projekt hinzu und definieren dann eine Fensterregistrierungsfunktion RegisterWindow() wie folgt:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0);//可以使GetMessage返回0 break; default: break; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } BOOL RegisterWindow() { WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof(wce); wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wce.hCursor = NULL; wce.hIcon = NULL; wce.hIconSm = NULL; wce.hInstance = NULL; wce.lpfnWndProc = WndProc; wce.lpszClassName = "DllMain"; wce.lpszMenuName = NULL; wce.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS; ATOM nAtom = RegisterClassEx(&wce); if (nAtom == 0) return FALSE; return true; }
Der Name der in RegisterWindow() registrierten Fensterklasse ist "DllMain", den wir in der Hauptfunktion von < aufrufen 🎜>dll Die Registrierungsfunktion schließt die Registrierung ab:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { .... RegisterWindow(); return TRUE; } }
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { ... HWND hWnd = CreateMain("DllMain", "我是一个Dll注册的窗口"); Display(hWnd); Message(); return 0; }
Führen Sie das Programm aus und Sie werden feststellen, dass wir dieses Fenster erfolgreich erstellt haben:
2.3 Lokale Fensterklasse
Per Definition ist dies bei der lokalen Fensterklasse nicht der Fall Fügen Sie CS_GLOBALCLASS zum Stil von wce hinzu. Die registrierten Fensterklassen sind alle Teilfensterklassen.
wce.style = CS_HREDRAW | CS_VREDRAW;//未添加CS_GLOBALCLASS
我们在上一文中注册的窗口就是一个局部的窗口类,它的特点就是只能在注册的作用域内使用,由于它和全局窗口类只在注册的style和作用域上有分别,这里就不再详述,如要了解,请参照上一文。
Das obige ist der detaillierte Inhalt vonWin32 SDK-Grundlagen (5) Eine kurze Einführung in die Fensterklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die nativen Apps von Windows 11 (wie der Datei-Explorer) und andere Shell-Apps verwenden standardmäßig abgerundete Ecken und Fluent Design-Elemente (wie Acryl). Ein weiteres wichtiges Designmerkmal von Windows 11 sind neben abgerundeten Ecken Materialien wie Glimmer, die die Hintergrundfarbe von Apps an den Desktop anpassen. Glimmer ähnelt Acryl, funktioniert jedoch etwas anders. Wie Microsoft es beschreibt, erstellt Windows Mica Materials eine „Farbhierarchie, indem es Hintergründe an Apps anpasst“.

Das neue Windows 11 SDK für Build 22523 enthüllte, dass Microsoft einen neuen Unschärfeeffekt für Windows 11 entwickelt. Dieser Effekt wird Tabbed genannt und gilt zusätzlich zu Acryl und Glimmer. Das neue DWMWA_SYSTEMBACKDROP_TYPE im 22523 SDK, die öffentliche Win32-API für Mica, Acrylic und ihre seltsame neue „Tab“-Mischung: pic.twitter.com/dbsu7ZFiIi – It’s All Back (@StartIsBack) 15. Dezember 2021 Verfügbar in den folgenden SDKs Beispielanwendung

Antivirensoftware zeigt auf Windows 32-Laptops manchmal eine Warnung mit dem Hinweis „Trojan/win11.casdet rfn“ an. Es weist darauf hin, dass der PC mit Trojaner-Malware infiziert ist und eine Fehlfunktion verursacht. Glücklicherweise gibt es einige Möglichkeiten, dieses Problem zu beheben, wie unten erläutert. Darüber hinaus könnte Sie unser ausführlicher Leitfaden dazu interessieren, ob cdn.districtm.io ein Popup/Virus/eine Malware ist oder nicht. Was ist Trojan/win32.casdet rfn? Trojan/win32.casdet rfn ist eine schwere Trojaner-Virusinfektion, die das System überlaufen und seine Prozesse abbrechen kann, was es einfach macht

Der Unterschied zwischen Win32 und Win64 ist: 1. Win32 bezieht sich auf die 32-Bit-Umgebung des Microsoft Windows-Betriebssystems, und Win64 bezieht sich auf die 64-Bit-Version des Microsoft Windows-Betriebssystems, die stabiler und schneller als die 32 ist -Bit-Version; 2. Win32 unterstützt bis zu 2G Speicher. 3. Win64 unterstützt 64-Bit-Prozessoren, aber Win32 strebt nach Einfachheit, während Win64 nach Leistung strebt.

Bereits im August 2021 versprach Microsoft, dass OneNote für Windows 10 und Windows 11 in den kommenden Monaten eine Reihe wichtiger Funktionsupdates erhalten würde, da der Technologieriese mehrere Versionen der Notizen-App in einem einzigen Teil der Bemühungen vereint der Kunden. OneNote hat in den letzten Jahren viele Veränderungen erfahren. Im Jahr 2018, als Microsoft wirklich wollte, dass die Benutzer seine UWP-Version von OneNote verwenden, hörte das Unternehmen auf, die ursprüngliche und funktionsreiche Version von OneNote mit vorinstallierten Office-Apps zu bündeln. Stattdessen hat Microsoft lediglich einen UWP-Client bereitgestellt und neue Funktionen für moderne Versionen hinzugefügt. Microsoft hat später geändert

Beherrschen Sie die wesentlichen Fähigkeiten für die Sekundärentwicklung des Java Hikvision SDK. Einführung: Mit der rasanten Entwicklung der Informationstechnologie wurden Videoüberwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Als führender inländischer Anbieter von Videoüberwachungslösungen nehmen die Produkte und Technologien von Hikvision seit jeher eine wichtige Position auf dem Markt ein. Um den Anforderungen verschiedener Projekte gerecht zu werden, stellt Hikvision Entwicklern ein SDK zur Durchführung sekundärer Entwicklungen zur Verfügung. In diesem Artikel werden einige wesentliche Fähigkeiten zur Beherrschung der Sekundärentwicklung des Java Hikvision SDK vorgestellt und entsprechende Codebeispiele beigefügt. 1. Hikvision verstehen

Das WindowsAppSDK ist eine Reihe von Tools und APIs, die Entwickler in ihren Windows-Anwendungen verwenden können, um „konsistente“ Funktionalität auf einer Vielzahl von Geräten unter Windows 10 (Version 1809 und höher) und Windows 11 bereitzustellen. Es ist wirklich wichtig zu verstehen, dass es bestehende Anwendungstypen wie .NET oder Windows SDK nicht ersetzt, sondern lediglich ein einheitliches API-Toolset bereitstellt, das zur Ergänzung Ihrer vorhandenen Anwendungen verwendet werden kann. Heute hat Microsoft Version 1.2 des Windows App SDK mit vielen neuen Funktionen veröffentlicht. Das Highlight dieser Version könnten Drittentwickler sein

Der vollständige Name von SDK lautet „Software Development Kit“, was auf Chinesisch „Software Development Kit“ bedeutet. Dabei handelt es sich um eine Reihe von Tools, die von Herstellern von Hardwareplattformen, Betriebssystemen (OS) oder Programmiersprachen bereitgestellt werden. SDKs unterstützen Softwareentwickler bei der Erstellung von Anwendungen für bestimmte Plattformen, Systeme oder Programmiersprachen. Ein Basis-SDK besteht normalerweise aus einem Compiler, Debugger und einer Anwendungsprogrammierschnittstelle (API), kann aber auch andere Inhalte enthalten, wie zum Beispiel: Dokumentation, Bibliotheken, Laufzeit-/Entwicklungsumgebung, Test-/Analysetools, Netzwerkprotokolle usw.
