Partager via


Fonction WinMain (winbase.h)

Point d’entrée fourni par l’utilisateur pour une application graphique Windows.

WinMain est le nom classique utilisé pour le point d’entrée de l’application. Pour plus d’informations, consultez Remarques.

Syntaxe

int __clrcall WinMain(
  [in]           HINSTANCE hInstance,
  [in, optional] HINSTANCE hPrevInstance,
  [in]           LPSTR     lpCmdLine,
  [in]           int       nShowCmd
);

Paramètres

[in] hInstance

Type : HINSTANCE

Handle de l’instance actuelle de l’application.

[in, optional] hPrevInstance

Type : HINSTANCE

Handle de l’instance précédente de l’application. Ce paramètre est toujours NULL. Si vous devez détecter si une autre instance existe déjà, créez un mutex nommé de manière unique à l’aide de la fonction CreateMutex. CreateMutex réussit même si le mutex existe déjà, mais la fonction retourne ERROR_ALREADY_EXISTS. Cela indique qu’une autre instance de votre application existe, car elle a créé d’abord le mutex. Toutefois, un utilisateur malveillant peut créer ce mutex avant de commencer et empêcher votre application de démarrer. Pour éviter cette situation, créez un mutex nommé de façon aléatoire et stockez le nom afin qu’il puisse uniquement être obtenu par un utilisateur autorisé. Vous pouvez également utiliser un fichier à cet effet. Pour limiter votre application à une instance par utilisateur, créez un fichier verrouillé dans le répertoire de profil de l’utilisateur.

[in] lpCmdLine

Type : LPSTR

Ligne de commande de l’application, à l’exclusion du nom du programme. Pour récupérer l’intégralité de la ligne de commande, utilisez la fonction GetCommandLine.

[in] nShowCmd

Type : int

Contrôle la façon dont la fenêtre doit être affichée. Ce paramètre peut être l’une des valeurs qui peuvent être spécifiées dans le paramètre nCmdShow pour la fonction ShowWindow.

Valeur de retour

Type : int

Si la fonction réussit, se terminant lorsqu’elle reçoit un message WM_QUIT, elle doit retourner la valeur de sortie contenue dans le paramètre wParam de ce message. Si la fonction se termine avant d’entrer la boucle de message, elle doit retourner zéro.

Remarques

Le nom WinMain est utilisé par la convention par de nombreux frameworks de programmation. Selon l’infrastructure de programmation, l’appel à la fonction WinMain peut être précédé et suivi d’activités supplémentaires spécifiques à ce framework.

Votre WinMain doit initialiser l’application, afficher sa fenêtre principale et entrer une boucle de récupération et de répartition des messages qui est la structure de contrôle de niveau supérieur pour le reste de l’exécution de l’application. Terminez la boucle de message lorsqu’il reçoit un message WM_QUIT. À ce stade, votre WinMain doit quitter l’application, en retournant la valeur passée dans le paramètre du message WM_QUIT. Si WM_QUIT a été reçu suite à l’appel PostQuitMessage, la valeur de wParam est la valeur du paramètre nExitCode de la fonction PostQuit Message. Pour plus d’informations, consultez Création d’une boucle de message.

Les applications ANSI peuvent utiliser le paramètre lpCmdLine de la fonction WinMain pour accéder à la chaîne de ligne de commande, à l’exclusion du nom du programme. Notez que lpCmdLine utilise le type de données LPSTR au lieu du type de données LPTSTR. Cela signifie que WinMain ne peut pas être utilisé par les programmes Unicode. La fonction GetCommandLineW peut être utilisée pour obtenir la ligne de commande en tant que chaîne Unicode. Certaines infrastructures de programmation peuvent fournir un autre point d’entrée qui fournit une ligne de commande Unicode. Par exemple, l’conforme Microsoft Visual Studio C++ utilise le nom wWinMain pour le point d’entrée Unicode.

Exemple

L’exemple de code suivant illustre l’utilisation de WinMain

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
    return MessageBox(NULL, "hello, world", "caption", 0);
}

Exigences

Exigence Valeur
client minimum pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
serveur minimum pris en charge Windows 2000 Server [applications de bureau uniquement]
plateforme cible Windows
d’en-tête winbase.h (inclure Windows.h)

Voir aussi

conceptuelle

createMutex

DispatchMessage

getCommandLine

GetMessage

autres ressources

PostQuitMessage

de référence

TranslateMessage

Windows