Heim >Betrieb und Instandhaltung >Windows-Betrieb und -Wartung >Win32 SDK-Grundlagen (6) Detaillierte Erläuterung des Fensterklassensuchprozesses und der zugehörigen APIs

Win32 SDK-Grundlagen (6) Detaillierte Erläuterung des Fensterklassensuchprozesses und der zugehörigen APIs

黄舟
黄舟Original
2017-06-06 09:44:402449Durchsuche

1. Der Suchprozess von Fensterklassen

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 registrieren

API

Register

Class

und RegisterClassEx RegisterClass und RegisterClassEx können zum Registrieren von Fensterklassen verwendet werden: Der Unterschied liegt hauptsächlich in den empfangenen Parametern. Dieser Parameter ist die Fensterklasse, die wir registrieren müssen. Die beiden Fensterklassen werden wie folgt deklariert:

ATOM 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

Funktion

lautet wie folgt: hInstance—— dient zum Festlegen des Suchbereichs, wenn dieser auf

NULL 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

eingestellt ist, wird in drei Bereichen gesucht: System, global und lokal . Der folgende Code deinstalliert die registrierte Fensterklasse

Button

:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn