Bases du SDK Win32 (3) La première étape pour créer une fenêtre Windows à partir de zéro

黄舟
Libérer: 2017-06-06 09:38:40
original
2209 Les gens l'ont consulté

1. Commençons par la classification des programmes de Windows.

Dès la première fois que je suis entré en contact avec un ordinateur au lycée (j'ai honte, je ne savais pas utiliser un ordinateur jusqu'au lycée, et je Je n'en savais rien avant d'être en première année d'universitéQQUne telle chose, ma famille est pauvre et je n'ai pas le choix), dans mon concept, l'ordinateur devrait soyez comme des fenêtres. Ce n'est donc qu'après avoir obtenu mon diplôme universitaire que j'ai réalisé qu'il existait un système d'exploitation comme Linux. Puis, après avoir commencé à travailler après l'obtention de mon diplôme, j'ai commencé à travailler. réalisé qu'Apple possède également son propre système d'exploitation. Par conséquent, je n’arrive toujours pas à comprendre pourquoi je me suis engagé sur la voie du non-retour en tant que codeur. Puis il est devenu incontrôlable dès qu'il a mis le pied dessus, jusqu'au jour où il a été abattu sur la plage. . .

Assez de bêtises, passons au sujet. Après avoir été exposés à windows pendant tant d'années, en tant que programmeurs, nous devons d'abord classer les programmes de windows en catégories :

(1) Programme console.

C'est probablement le premier programme que j'ai jamais développé en tant que codeur professionnel. Lorsque nous avons écrit pour la première fois le premier "bonjour tout le monde" en langue C en première année d'université, le programme de l'époque était le programme de contrôle de Taiwan. Son essence est un programme DOS, qui n'a pas sa propre fenêtre. La sortie que vous voyez est Bonjour. La fenêtre du monde est le programme lui-même empruntant la fenêtre DOS au système d'exploitation.

(2) Programme Windows.

Le programme Window est probablement le programme avec lequel nous sommes le plus en contact, du bureau couramment utilisé aux programmes avec diverses interfaces visibles. Il s'agit d'un programme Windows sous windows. Le but de cette chronique est de présenter les bases des programmes Windows windows.

(3) Programme de bibliothèque dynamique.

C'est le fameux dll Pour les novices, vous n'avez peut-être vu que des cochons courir et pas manger. . Pour les utilisateurs ordinaires de windows, ils n'ont peut-être jamais vu de cochon courir. Mais en tant que programmeur chevronné, cela ne devrait être que trop familier. Nous présenterons également plus tard les bases du développement de ce type de programme.

(4) Programme de bibliothèque Statique .

Il s'agit d'un type de programme avec le suffixe lib Il n'y a pas de programme de niveau antique. 🎜>dll est couramment utilisé, mais il a toujours son propre statut dans le monde. De même, nous présenterons également la base de développement de son développement plus tard.

Après avoir introduit le non-sens et la classification des programmes windows, nous avons officiellement commencé à développer le contenu suivant.

2. Le processus de création de fenêtres à partir de zéro

L'objectif principal de cet article est de présenter comment créer méthode du programme Windows, peut-être avez-vous entendu parler du programme MFC, cette interface framework a déjà combiné Le processus de création du programme d'interface Windows est complètement encapsulé, et ce que nous devons apprendre ensuite est de nous débarrasser des chaînes de MFC et développer et créer un programme d'interface windows. Tout d’abord, introduisons une étape pour créer un programme Windows Dans les articles suivants, je vais implémenter et expliquer chaque étape étape par étape.

La création d'un programme d'interface Windows est divisée en 7 étapes :

(1)

DéfinitionWinFonction principale (c'est Windows Pour l'entrée au programme d'interface, merci de vous référer au premier article de cette chronique).

(2) Définir la fonction de traitement de fenêtre.

(3) Fenêtre d'inscription

(4) Créer une fenêtre

(5) Afficher Fenêtre

(6) Ecriture du message

Boucle Fonction

(7) Traitement du message

3. Créez un environnement de test

Nous créons d'abord un programme de fenêtre win32. Nous utilisons l'environnement de programmation de VS2015 Les étapes pour créer un programme de fenêtre win32 sont les fichiers <.>->Créez un nouveau projet -> et sélectionnez Visuel dans le modèle C++, puis sélectionnez le programme de fenêtre Win32. Mais dans la dernière étape, avant de cliquer sur le bouton Terminer , nous devons sélectionner un projet vide, ce qui signifie qu'il n'y aura aucun fichier une fois ce projet terminé. Nous devons créer un nouveau cpp. fichier à partir duquel démarrer Créez un programme de fenêtre à partir de zéro.


3.1
Définir la fonction

winMain .

Dans le fichier cpp vide nouvellement ajouté, nous ajoutons la fonction wWinMain de l'entrée de programme suivante :

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR    lpCmdLine,
_In_ int       nCmdShow)
{
}
Copier après la connexion
Ici, nous introduisons d'abord les paramètres de la fonction

WinMain : hInstance -

Le handle d'instance du programme actuel, qui est l'emplacement mémoire du programme actuel

.

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);
}
Copier après la connexion

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

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;
    }
}
Copier après la connexion

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);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!