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

黄舟
Freigeben: 2017-06-06 09:44:40
Original
2396 Leute haben es durchsucht

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
);
Nach dem Login kopieren
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;
Nach dem Login kopieren
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;
Nach dem Login kopieren

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

<🎜 eingestellt ist >

NULL wird in drei Bereichen gesucht: systemisch, global und lokal.

BOOL WINAPI GetClassInfo(
  _In_opt_ HINSTANCE  hInstance,
  _In_     LPCTSTR    lpClassName,
  _Out_    LPWNDCLASS lpWndClass
);
Nach dem Login kopieren
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);
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!