Función WinMain (winbase.h)

Punto de entrada proporcionado por el usuario para una aplicación gráfica basada en Windows.

WinMain es el nombre convencional que se usa para el punto de entrada de la aplicación. Para obtener más información, vea la sección Comentarios.

Sintaxis

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

Parámetros

[in] hInstance

Tipo: HINSTANCE

Identificador de la instancia actual de la aplicación.

[in, optional] hPrevInstance

Tipo: HINSTANCE

Identificador de la instancia anterior de la aplicación. Este parámetro siempre es NULL. Si necesita detectar si ya existe otra instancia, cree una exclusión mutua con nombre único mediante la función CreateMutex . CreateMutex se realizará correctamente incluso si la exclusión mutua ya existe, pero la función devolverá ERROR_ALREADY_EXISTS. Esto indica que existe otra instancia de la aplicación, ya que creó primero la exclusión mutua. Sin embargo, un usuario malintencionado puede crear esta exclusión mutua antes de hacerlo e impedir que la aplicación se inicie. Para evitar esta situación, cree una exclusión mutua con nombre aleatorio y almacene el nombre para que un usuario autorizado solo pueda obtenerlo. Como alternativa, puede usar un archivo para este fin. Para limitar la aplicación a una instancia por usuario, cree un archivo bloqueado en el directorio de perfiles del usuario.

[in] lpCmdLine

Tipo: LPSTR

Línea de comandos de la aplicación, excepto el nombre del programa. Para recuperar toda la línea de comandos, use la función GetCommandLine .

[in] nShowCmd

Tipo: int

Controla cómo se va a mostrar la ventana. Este parámetro puede ser cualquiera de los valores que se pueden especificar en el parámetro nCmdShow para la función ShowWindow .

Valor devuelto

Tipo: int

Si la función se realiza correctamente, finalizando cuando recibe un mensaje de WM_QUIT , debe devolver el valor de salida contenido en el parámetro wParam de ese mensaje. Si la función finaliza antes de escribir el bucle de mensajes, debe devolver cero.

Comentarios

Muchos marcos de programación usan el nombre WinMain por convención. En función del marco de programación, la llamada a la función WinMain puede ir precedida y seguida de actividades adicionales específicas de ese marco.

WinMain debe inicializar la aplicación, mostrar su ventana principal y escribir un bucle de recuperación y distribución de mensajes que sea la estructura de control de nivel superior durante el resto de la ejecución de la aplicación. Finalice el bucle del mensaje cuando reciba un mensaje de WM_QUIT . En ese momento, winMain debe salir de la aplicación y devolver el valor pasado en el parámetro wParam del mensaje WM_QUIT. Si WM_QUIT se recibió como resultado de llamar a PostQuitMessage, el valor de wParam es el valor del parámetro nExitCode de la función PostQuitMessage. Para obtener más información, vea Crear un bucle de mensajes.

Las aplicaciones ANSI pueden usar el parámetro lpCmdLine de la función WinMain para tener acceso a la cadena de la línea de comandos, excepto el nombre del programa. Tenga en cuenta que lpCmdLine usa el tipo de datos LPSTR en lugar del tipo de datos LPTSTR . Esto significa que los programas Unicode no pueden usar WinMain . La función GetCommandLineW se puede usar para obtener la línea de comandos como una cadena Unicode. Algunos marcos de programación pueden proporcionar un punto de entrada alternativo que proporciona una línea de comandos Unicode. Por ejemplo, el cumplimiento de Microsoft Visual Studio C++ usa el nombre wWinMain para el punto de entrada Unicode.

Ejemplo

En el ejemplo de código siguiente se muestra el uso de WinMain.

#include <windows.h>

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winbase.h (incluya Windows.h)

Consulte también

Conceptual

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

Otros recursos

PostQuitMessage

Referencia

TranslateMessage

Windows