Heim >Betrieb und Instandhaltung >Windows-Betrieb und -Wartung >Win32 SDK-Grundlagen (6) Detaillierte Erläuterung des Fensterklassensuchprozesses und der zugehörigen APIs
Im vorherigen Artikel haben wir die drei Fensterklassen des Fenster-Systems vorgestellt Klasse, globale Fensterklasse und lokale Fensterklasse. Jede Fensterklasse hat einen anderen Bereich im Betriebssystem, und der in jedem Bereich registrierte Fensterklassenname kann nicht wiederholt werden. Beim Erstellen eines Fensters wird es häufig nach dem Namen der Fensterklasse im System-, globalen und lokalen Bereich durchsucht. Der Suchvorgang wird wie folgt zusammengefasst:
(1) Der Betrieb Das System sucht nun anhand des Namens der eingehenden Fensterklasse. Wenn nicht gefunden, führen Sie Schritt 3 aus . (2) Vergleichen Sie die lokale Fensterklasse mit der HINSTANCE
-Variable , die beim Erstellen des Fensters übergeben wurde. Wenn festgestellt wird, dass sie gleich sind, bedeutet dies, dass sich die erstellten und registrierten Fenster im selben Modul befinden und das erstellte Fenster zurückgegeben wird. Wenn nicht gleich, fahren Sie mit Schritt 3 fort. (3) Suchen Sie in der globalen Fensterklasse der Anwendung. Wenn nicht gefunden, führen Sie Schritt
aus 🎜>Schritte. (4) Verwenden Sie die gefundenen Fensterklasseninformationen, um ein Fenster zu erstellen und zurückzukehren. (5) Suchen Sie in der Systemfensterklasse. Wenn es gefunden wird, erstellen Sie das Fenster. Wenn es nicht gefunden wird, schlägt die Fenstererstellung fehl.
2. Fensterklasse registrierenAPIRegister
ClassATOM WINAPI RegisterClass( _In_ const WNDCLASS *lpWndClass ); ATOM WINAPI RegisterClassEx( _In_ const WNDCLASSEX *lpwcx );Wie Sie dem obigen Code entnehmen können, ist der Hauptunterschied zwischen den beiden Fensterklassen
Struktur ist WNDCLASSEX enthält die Strukturgröße des cbSize-Fensters und das kleine Symbolhandle des hIconSm-Fensters. Die Bedeutung anderer Parameter finden Sie unter MSDN
.typedef struct tagWNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS, *PWNDCLASS;
typedef struct tagWNDCLASSEX { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; } WNDCLASSEX, *PWNDCLASSEX;
3. Informationen zum registrierten Fenster abrufenGetClassInfoGetClassInfo() APIkanndas registrierte Fenster abrufen information Die Fensterinformationen, der Prototyp ihrer
FunktionNULL wird in drei Bereichen gesucht: systemisch, global und lokal.
BOOL WINAPI GetClassInfo( _In_opt_ HINSTANCE hInstance, _In_ LPCTSTR lpClassName, _Out_ LPWNDCLASS lpWndClass );lpClassName – ist der Name der zu findenden Fensterklasse.
lpWndClass – Die Adresse der in WndClass übergebenen Strukturvariablen, die zum Empfangen von Fensterklasseninformationen verwendet wird. Suchen wir die Fensterinformationen der oben erstellten Klasse
Button:
Lassen Sie uns den Haltepunkt einrichten , sehen Sie sich die erhaltenen Informationen der Fensterklasse Button
an:4 🎜> Wir können die Registrierung der registrierten Fensterklasse über UnregisterClass aufheben. Ihr Prototyp lautet wie folgt:
WNDCLASS wc; if (GetClassInfo(NULL, "Button", &wc) == false) MessageBox(NULL,"GetClassInfo Faile",NULL,NULL);lpClassName – ist der Name der zu deinstallierenden Fensterklasse.
hInstance —— dient zum Festlegen des Suchbereichs. Wenn er auf NULL
:
Das obige ist der detaillierte Inhalt vonWin32 SDK-Grundlagen (6) Detaillierte Erläuterung des Fensterklassensuchprozesses und der zugehörigen APIs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!