Zum Hauptinhalt springen

So schreiben Sie ein Windows-Fenster: Eine detaillierte Anleitung mit Beispielen

Anwendungsfenster sind das Hauptelement der Benutzeroberfläche im Windows-Betriebssystem. Das Schreiben eines eigenen Fensters kann ein wichtiger Schritt bei der Entwicklung von Software für diese Plattform sein. In diesem Handbuch werden wir die grundlegenden Schritte zum Erstellen eines Fensters für Windows mit der Programmiersprache C++ untersuchen. Wir werden uns auch Codebeispiele ansehen, um den Prozess besser zu verstehen.

Bevor Sie mit dem Schreiben eines Fensters beginnen, müssen Sie die grundlegenden Konzepte zur Fensterprogrammierung in Windows verstehen. Jedes Fenster verfügt über einen Bereich des Clientbereichs, der der Bereich ist, in dem der Inhalt des Fensters angezeigt wird. Es kann verschiedene Arten von Fenstern geben, z. B. ein Hauptfenster, ein untergeordnetes Fenster oder ein Dialogfeld.

Ein Programm, das in der Programmiersprache C++ geschrieben wurde, muss einen Einstiegspunkt haben, der normalerweise als main() -Funktion bezeichnet wird. In dieser Funktion müssen Sie alle notwendigen Vorgänge ausführen, um ein Fenster zu erstellen und anzuzeigen. Sie müssen zuerst die Fensterklasse registrieren und dann eine Instanz dieser Klasse erstellen. Anschließend können Sie das Fenster mit den Funktionen ShowWindow() und UpdateWindow() anzeigen.

Bei der Entwicklung von Windows-Software ist es wichtig, nicht nur die Erstellung eines Fensters zu berücksichtigen, sondern auch die Verarbeitung der im Fenster angezeigten Nachrichten. Windows sendet verschiedene Nachrichten an die Anwendung, z. B. Nachrichten über das Drücken von Tasten, das Bewegen der Maus oder das Schließen eines Fensters. Eine spezielle Funktion, die als Handlerfenster-Funktion bezeichnet wird, wird verwendet, um diese Nachrichten zu verarbeiten.

In diesem Leitfaden werden wir alle grundlegenden Aspekte des Erstellens einer Windows-Fensteranwendung untersuchen. Wir betrachten die Schritte zum Erstellen eines Fensters, zum Verarbeiten von Nachrichten und zum Hinzufügen von Steuerelementen zum Fenster. Wir werden auch Codebeispiele bereitstellen, die Ihnen helfen, jeden Schritt des Entwicklungsprozesses besser zu verstehen.

Schritt 1: Installieren der Entwicklungsumgebung

1. C++ - Compiler

Um ein Fenster für Windows zu erstellen, verwenden Sie die Programmiersprache C++. Dazu müssen Sie den C++ - Compiler installieren. Eine der beliebtesten Entscheidungen ist MinGW (Minimalist GNU for Windows), das den GCC-Compiler für Windows enthält. Sie können MinGW von der offiziellen Website herunterladen und installieren, indem Sie die Anweisungen auf dem Bildschirm befolgen.

2. Entwicklungsumgebung

Es wird empfohlen, die integrierte Entwicklungsumgebung (IDE) zu verwenden, um den Entwicklungsprozess zu vereinfachen. Eine beliebte Wahl für die Entwicklung von Fensteranwendungen ist Microsoft Visual Studio. Sie können Visual Studio Community Edition von der offiziellen Microsoft-Website herunterladen und installieren.

3. Windows-API-Bibliothek

Um ein Fenster für Windows zu erstellen, benötigen Sie eine Windows-API-Bibliothek, die die erforderlichen Funktionen und Klassen für die Arbeit mit Fenstern und anderen Elementen der Benutzeroberfläche bereitstellt. Es ist im Lieferumfang des Betriebssystems enthalten, daher ist es nicht notwendig, es separat zu installieren.

Nachdem Sie alle erforderlichen Tools installiert haben, können Sie mit der Entwicklung von Windows für Windows beginnen.

Schritt 2: Erstellen eines Fensters

1. Bereiten Sie Ihre Entwicklungsumgebung vor, indem Sie die erforderlichen Tools wie die Entwicklungsumgebung (IDE) und den Compiler zum Erstellen von Windows-Anwendungen installieren.

2. Öffnen Sie ein neues Projekt in Ihrer Entwicklungsumgebung und wählen Sie eine Vorlage zum Erstellen des Fensters aus. Die meisten IDEs verfügen über vordefinierte Vorlagen, mit denen Sie ein Fenster schnell erstellen können.

3. Geben Sie die Größe und Position des Fensters an. Sie können die Größe des Fensters in Pixeln festlegen, indem Sie Breite und Höhe angeben. Sie können auch die Position des Fensters auf dem Bildschirm bestimmen, indem Sie die Koordinaten der oberen linken Ecke des Fensters angeben.

4. Fügen Sie dem Fenster Steuerelemente hinzu. Dies können Schaltflächen, Texteingabefelder, Listen usw. sein. Legen Sie für jedes Steuerelement eine eindeutige ID fest, um die Ereignisse später zu verarbeiten.

5. Definieren Sie Funktionen zum Behandeln von Fensterereignissen und Steuerelementen. Dies können Funktionen sein, die aufgerufen werden, wenn Sie auf eine Schaltfläche klicken, den Text im Eingabefeld ändern oder einen Wert aus einer Liste auswählen.

6. Schreiben Sie Code, der die API (Application Programming Interface) des Windows-Betriebssystems verwendet, um Fenster und Steuerelemente zu erstellen und Ereignisse zu behandeln. Dies kann ein Satz von Funktionen sein, die in einer bestimmten Reihenfolge aufgerufen werden, um ein Fenster zu erstellen und anzuzeigen.

7. Kompilieren Sie den Code und führen Sie die Anwendung aus, um das erstellte Fenster anzuzeigen. Stellen Sie sicher, dass das Fenster so aussieht und sich verhält, wie Sie es sich vorgestellt haben und dass die Steuerelemente ordnungsgemäß funktionieren.

Hier ist ein C++ - Beispielcode, der die Windows-API-Bibliothek zum Erstellen eines einfachen Fensters verwendet:

#include LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)return 0;>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);wc.lpfnWndProc = WindowProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);HWND hwnd = CreateWindowEx(0,CLASS_NAME,L"Window Title",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,NULL,NULL,hInstance,NULL);if (hwnd == NULL)ShowWindow(hwnd, nCmdShow);MSG msg = < >;while (GetMessage(&msg, NULL, 0, 0))return msg.wParam;>

Dieser Code erstellt ein einfaches Fenster mit dem Titel "Window Title" und behandelt die Ereignisse zum Schließen des Fensters und zum Beenden der Anwendung vollständig.

Schritt 3: Arbeiten mit Kontrollen

Kontrollen spielen eine wichtige Rolle beim Erstellen eines Fensters für Windows. Sie ermöglichen es Benutzern, mit der Anwendung zu interagieren, Daten einzugeben und verschiedene Aktionen auszuführen.

In diesem Schritt werden wir uns die grundlegenden Arten von Kontrollen ansehen und wie Sie sie in einem Windows-Fenster verwenden.

1. Tasten

Schaltflächen gehören zu den häufigsten Steuerelementen. Sie ermöglichen es dem Benutzer, bestimmte Aktionen oder Befehle auszuführen. Sie können den folgenden Code verwenden, um eine Schaltfläche in einem Windows-Fenster zu erstellen:

CreateWindow("BUTTON", // Класс кнопки"Надпись кнопки", // Текст на кнопкеWS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // Стиль кнопкиx, y, width, height, // Координаты и размеры кнопкиhwnd, // Родительское окно(HMENU)ID_BUTTON, // Идентификатор кнопки(HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE),NULL);

Verwenden Sie die CreateWindow-Funktion, um eine Schaltfläche zu erstellen. Geben Sie unter "Schaltflächenklasse" die Schaltflächenklasse an, und geben Sie unter "Text auf Schaltfläche" den Text an, der auf der Schaltfläche angezeigt werden soll. Verwenden Sie für den Schaltflächenstil Flags wie BS_DEFPUSHBUTTON, um eine Standardschaltfläche zu erstellen. Legen Sie die gewünschten Koordinaten und Abmessungen der Schaltfläche für die Anzeige im Fenster fest. Geben Sie das übergeordnete Fenster mit dem Parameter hwnd an. Geben Sie im Parameter HMENU einen eindeutigen Bezeichner für die Schaltfläche an.

2. Textfelder

Textfelder ermöglichen es dem Benutzer, Textinformationen einzugeben und zu bearbeiten. Sie können den folgenden Code verwenden, um ein Textfeld in einem Fenster für Windows zu erstellen:

CreateWindow("EDIT", // Класс текстового поляNULL, // Начальный текстWS_VISIBLE | WS_CHILD | WS_BORDER,x, y, width, height, // Координаты и размеры текстового поляhwnd, // Родительское окно(HMENU)ID_TEXT_BOX, // Идентификатор текстового поля(HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE),NULL);

Übergeben Sie die Textfeldklasse im Parameter "Textfeldklasse". Legen Sie den Anfangstext fest, der im Textfeld angezeigt wird, indem Sie ihn im Parameter "Anfangstext" übergeben. Verwenden Sie die Parameter x, y, width, height, um die erforderlichen Koordinaten und Abmessungen des Textfelds zu bestimmen. Legen Sie das übergeordnete Fenster mit dem hwnd-Parameter und dem eindeutigen Bezeichner für das Textfeld im HMENU-Parameter fest.

3. Listen

Listen ermöglichen es dem Benutzer, eine oder mehrere Positionen aus einer bestimmten Liste auszuwählen. Sie können den folgenden Code verwenden, um eine Liste in einem Windows-Fenster zu erstellen:

CreateWindow("LISTBOX", // Класс спискаNULL, // Начальный список позицийWS_VISIBLE | WS_CHILD | LBS_STANDARD,x, y, width, height, // Координаты и размеры спискаhwnd, // Родительское окно(HMENU)ID_LIST_BOX, // Идентификатор списка(HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE),NULL);

Geben Sie im Parameter Listenklasse eine Listenklasse an. Wenn Sie bereits eine Positionsliste in der Liste definiert haben, übergeben Sie sie im Parameter "Erste Positionsliste". Stellen Sie die gewünschten Koordinaten und Abmessungen der Liste mit den Parametern x, y, width, height ein. Übergeben Sie das übergeordnete Fenster im hwnd-Parameter und den eindeutigen Bezeichner für die Liste im HMENU-Parameter.

In diesem Abschnitt haben wir uns die grundlegenden Arten von Kontrollen angesehen, die Sie in einem Windows-Fenster verwenden können. Sie können verschiedene Arten von Kontrollen kombinieren, um ein vollständiges Fenster zu erstellen, das es Benutzern ermöglicht, mit Ihrer Anwendung zu interagieren.

Schritt 4: Beispiele für Fensteranwendungen

In diesem Abschnitt betrachten wir einige Beispiele für Fensteranwendungen, die Sie mit der Windows-API erstellen können.

KodeОписание
#include LRESULT RÜCKRUF WndProc (HWND hwnd, UINT Nachricht, WPARAM wParam, LPARAM lParam) rückgabe 0; > int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) < konstantes Zeichen KLASSENNAME[] = "Meine Fensterklasse"; WNDCLASS wc = ; wc.lpfnWndProc = WndProc; wc.Hindernis = Hindernis; wc.lpszClassName = KLASSENNAME; Registerklasse(&wc); HWND hwnd = CreateWindowEx( 0, CLASS_NAME, "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if (hwnd == NULL) < return 0; >ShowWindow(hwnd, nCmdShow); MSG msg = ; while (GetMessage(&msg, NULL, 0, 0)) < TranslateMessage(&msg); DispatchMessage(&msg); >return (int)msg.wParam; > In diesem Beispiel wird ein einfaches Fenster mit Funktionen aus der Windows-API erstellt. Das Fenster hat keine andere Funktion als die Möglichkeit, es zu schließen.

2. Окно с кнопкой:

КодОписание
#LRESULT-RÜCKRUF einschließen WndProc (HWND hwnd, UINT Nachricht, WPARAM wParam, LPARAM lParam) pause; Standard: DefWindowProc (hwnd, msg, wParam, lParam) zurückgeben; > 0 zurückgeben; > int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) < konstantes Zeichen KLASSENNAME[] = "Meine Fensterklasse"; WNDCLASS wc = ; wc.lpfnWndProc = WndProc; wc.Hindernis = Hindernis; wc.lpszClassName = KLASSENNAME; Registerklasse (&wc); HWND hwnd = CreateWindowEx( 0, KLASSENNAME, "Mein Fenster", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if (hwnd == NULL) < return 0; >HWND-Schaltfläche = CreateWindow ( "Schaltfläche", "Klick mich an", WS_TABSTOP | WS_VISIBLE | WS_CHILD, 10, 10, 100, 30, hwnd, (HMENÜ) 1, Hinweis, NULL ); if (Schaltfläche == NULL) < return 0; >ShowWindow(hwnd, nCmdShow); NACHRICHT Nachricht = ; while (getMessage(&Nachricht, NULL, 0,0)) < TranslateMessage(&msg); DispatchMessage(&msg); >rückgabe (int) Nachricht.wParam; > In diesem Beispiel wird ein Fenster mit einer Schaltfläche erstellt. Wenn Sie auf die Schaltfläche klicken, wird die Meldung "Hello, World!".

3. Fenster mit Textfeld:

KodeDie Beschreibung
#include LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) < static HWND textbox; switch (msg) < case WM_CREATE: textbox = CreateWindow( "edit", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 10, 10, 200, 20, hwnd, NULL, NULL, NULL ); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); >return 0; > int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) < const char CLASS_NAME[] = "My Window Class"; WNDCLASS wc = ; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); HWND hwnd = CreateWindowEx( 0, CLASS_NAME, "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if (hwnd == NULL) < return 0; >ShowWindow(hwnd, nCmdShow); MSG msg = ; while (GetMessage(&msg, NULL, 0, 0)) < TranslateMessage(&msg); DispatchMessage(&msg); >return (int)msg.wParam; > In diesem Beispiel wird ein Fenster mit einem Textfeld implementiert, in dem der Benutzer Text eingeben kann.

Dies ist nur ein kleiner Teil dessen, was mit der Windows-API erstellt werden kann. Mit jedem Schritt werden Sie mehr und mehr Möglichkeiten entdecken, um funktionale und benutzerfreundliche Windows-Fensteranwendungen zu erstellen.

Im nächsten Abschnitt werden wir über verschiedene Möglichkeiten zum Rendern von Grafiken in einem Fenster sprechen.