Heim >Betrieb und Instandhaltung >Windows-Betrieb und -Wartung >Win32 SDK-Grundlagen (3) Der erste Schritt zum Erstellen eines Windows-Fensters von Grund auf

Win32 SDK-Grundlagen (3) Der erste Schritt zum Erstellen eines Windows-Fensters von Grund auf

黄舟
黄舟Original
2017-06-06 09:38:402234Durchsuche

1. Beginnen wir mit der Programmklassifizierung von Windows.

Seitdem ich in der High School zum ersten Mal mit einem Computer in Kontakt kam (ich schäme mich, ich wusste bis zur High School nicht, wie man einen Computer benutzt, und ich Ich wusste nichts davon, bis ich in meinem ersten Studienjahr warQQSo etwas, die Familie ist arm und hat keine Wahl), in meinem Konzept sollte es der Computer sein wie Windows. Erst nach meinem College-Abschluss wurde mir klar, dass es ein Betriebssystem wie Linux gab erkannte, dass Apple auch ein eigenes Betriebssystem hat. Daher kann ich immer noch nicht verstehen, warum ich als Programmierer den Weg ohne Wiederkehr eingeschlagen habe. Dann geriet er außer Kontrolle, sobald er einen Fuß darauf setzte, bis er eines Tages am Strand erschossen wurde. . .

Genug Unsinn, kommen wir zum Thema. Da wir als Programmierer so viele Jahre mit Windows konfrontiert waren, müssen wir zunächst die Programme von Windows in Kategorien einteilen:

(1) Konsolenprogramm.

Dies ist wahrscheinlich das erste Programm, das ich jemals als professioneller Programmierer entwickelt habe. Als wir in unserem ersten Studienjahr zum ersten Mal das erste „Hallo Welt“ in der Sprache C schrieben, war das damalige Programm war das Kontroll-Taiwan-Programm. Sein Kern ist ein DOS-Programm, das kein eigenes Fenster hat. Die Ausgabe, die Sie sehen, ist Hallo Das Fenster der Welt ist das Programm selbst, das sich das DOS-Fenster vom Betriebssystem leiht.

(2) Fensterprogramm.

Das Fensterprogramm ist wahrscheinlich das Programm, mit dem wir am häufigsten in Kontakt kommen, vom häufig verwendeten Office bis hin zu Programmen mit verschiedenen sichtbaren Schnittstellen. Es handelt sich um ein Fensterprogramm unter Windows. Ziel dieser Kolumne ist es, die Grundlagen von Windows-Fensterprogrammen vorzustellen.

(3) Dynamisches Bibliotheksprogramm.

Das ist das berühmte dll Für Anfänger haben Sie vielleicht nur weglaufende Schweine gesehen, aber nicht Gefressen. Normale Benutzer von Windows haben vielleicht noch nie ein Schwein rennen sehen. Aber als erfahrener Programmierer sollte das nur allzu vertraut sein. Wir werden später auch die Grundlagen der Entwicklung dieser Art von Programmen vorstellen.

(4) Statisches Bibliotheksprogramm.

Dies ist ein Programmtyp mit dem Suffixnamen lib. Es gibt kein dll wird häufig verwendet, hat aber weltweit immer noch seinen eigenen Status. In ähnlicher Weise werden wir später auch die Entwicklungsgrundlage seiner Entwicklung vorstellen.

Nachdem wir den Unsinn und die Klassifizierung von Windows-Programmen vorgestellt haben, haben wir offiziell mit der Entwicklung des folgenden Inhalts begonnen.

2. Der Prozess der Erstellung von Fenstern von Grund auf

Der Hauptzweck dieses Artikels besteht darin, vorzustellen, wie man Windows Programmmethode, vielleicht haben Sie vom MFC-Programm gehört, dieses Schnittstellen-Framework ist bereits integriert Der Erstellungsprozess des Windows-Schnittstellenprogramms ist vollständig gekapselt, und was wir als Nächstes lernen müssen, ist, die Fesseln von MFC loszuwerden und ein WindowsSchnittstellenprogramm entwickeln und erstellen. Lassen Sie uns zunächst einen Schritt zum Erstellen eines Windows-Programms vorstellen. In den folgenden Artikeln werde ich jeden Schritt Schritt für Schritt umsetzen und erklären.

Das Erstellen eines

Windows-Schnittstellenprogramms ist in 7 Schritte unterteilt: (1)

Definition

WinHauptfunktionFunktion (dies ist Windows Den Zugang zum Schnittstellenprogramm finden Sie im ersten Artikel dieser Kolumne. (2) Definieren Sie die Fensterverarbeitungsfunktion.

(3) Registrierungsfenster

(4) Fenster erstellen

(5) Anzeige Fenster

(6) Nachricht schreiben

Schleife

Funktion (7) Nachricht verarbeiten

3. Erstellen Sie eine Testumgebung

Wir erstellen zunächst

ein win32-Fensterprogramm. Wir verwenden die Programmierumgebung von VS2015. Die Schritte zum Erstellen eines win32-Fensterprogramms sind die Dateien ->Erstellen Sie ein neues -> Projekt und wählen Sie Visual in der Vorlage aus C++, und wählen Sie dann das Fensterprogramm Win32 aus. Aber im letzten Schritt, bevor wir auf die Schaltfläche „Fertig stellen“ klicken, müssen wir ein leeres Projekt auswählen, was bedeutet, dass nach Abschluss dieses Projekts keine Dateien mehr vorhanden sind. Wir müssen ein neues CPP erstellen Datei zum Starten Erstellen Sie ein Windows-Programm von Grund auf.

3.1
Definieren Sie die Funktion

winMain

.

In der neu hinzugefügten leeren cpp-Datei fügen wir die wWinMain-Funktion des folgenden Programmeintrags hinzu:

Hier stellen wir zunächst die Parameter der
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR    lpCmdLine,
_In_ int       nCmdShow)
{
}

WinMain-Funktion vor: hInstance - Das Instanzhandle des aktuellen Programms, das den Speicherort des aktuellen Programms darstellt

.

hPrevInstance ——当前程序前一个程序实例句柄,目前已经废弃,不再使用。

lpCmdLine —— 命令行参数,我们执行程序时可以用命令行的形式传入一些参数。

nCmdShow —— 窗口的显示方式,最大化、最小化那种。

3.2 定义窗口处理函数

      窗口处理函数用来为系统回调函数,主要用来处理消息。像我们平常对程序的一系列操作,反应到程序内部,其实都是产生了一系列的操作。比如窗口关闭时会传递窗口关闭的消息,窗口最大化时也会传递最大化的消息,包括我们拖动窗口都会产生消息。而我们定义的窗口处理函数就是处理操作上述的消息,如下面所示,我们定义的窗口处理函数处理了一个WM_DESTROY消息,这是我们在关闭窗口时发送的消息,被我们的窗口处理函数捕获之后,会调用系统的APIPostQuitMessage(0),使窗口退出

    窗口处理函数共有四个参数:

hWnd —— 是窗口的句柄。

uMsg —— 是传入的消息,它的本质就是无符号整形的数字。

wParamlParam —— 是消息附带的两个参数。

//窗口处理函数
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);
}

     我们先定义窗口处理函数,稍后再进行使用。

3.3 编写窗口注册函数

         一个窗口,在创建之前需要先向操作系统进行注册,这类似现实生活中我们开公司,要先向工商局进行注册一样。wce是一个WNDCLASSEX 类型的结构体,这就是一个窗口类,包含了我们所需要的窗口信息,包括菜单、图标、背景色等等。它最主要的是两个成员,hInstance是当前程序的实例句柄,lpszClassName是我们注册的类名称,其他的这里不再解释,可参照MSDN。

    我们通过RegisterClassEx()这个API将窗口类在操作系统中进行注册,并通过其返回值判断是否注册成功。我们在WinMain函数中进行窗口的注册工作,请看下面的代码:

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR    lpCmdLine,
_In_ int       nCmdShow)
{
    //注册窗口类
    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 = hInstance;
    wce.lpfnWndProc = wndProc;
    wce.lpszClassName = “Main”;
    wce.lpszMenuName = NULL;
    wce.style = CS_HREDRAW | CS_VREDRAW;
    ATOM nAtom = RegisterClassEx(&wce);
    if (!nAtom )
    {
        MessageBox(NULL, "注册失败", "Infor", MB_OK);
        return 0;
    }
}

3.4 创建窗口

    接下来我们创建窗口,创建窗口我们使用CreateWindowEx系统API,请留意下面它的第2、3两个参数,第二个参数使我们之前注册的窗口类名称,第三个参数是窗口的标题名称,其他的是一些窗口显示的参数,这里不再详细解释。

HWND hWnd = CreateWindowEx(0, “Main”, “Window”,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);

Das obige ist der detaillierte Inhalt vonWin32 SDK-Grundlagen (3) Der erste Schritt zum Erstellen eines Windows-Fensters von Grund auf. 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