[C con Clase] No se muestra la ventana con el API de Windows

David Reza l.fix3r.l en gmail.com
Jue Ago 7 01:36:22 CEST 2008


Hola a todos, tengo un programa sencillo usando la API de Windows y lo he
hecho sin ver algún ejemplo. Cuando lo terminé lo compilé y no me dió ningún
error, pero al ejecutarse lo único que me sale es la consola y no se muestra
la ventana. Después de ésto revisé mi código con los ejemplos y no encuentro
nada mal, sin embargo la ventan no se muestra!

Aquí les dejo el código para que lo verifiquen y si encuentran algo mal me
puedan corregir.

Por si las dudas, utilizo DevCpp.

#include <windows.h>

#define CM_ABRIR    100
#define CM_GUARDAR  101
#define CM_SALIR    102

LRESULT CALLBACK WindowProcedure (HWND hWindow, UINT Mensaje, WPARAM wParam,
LPARAM lParam);
void InsertarMenu(HWND hWindow);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpszCmdParam, int nCmdShow)
{
    HWND hWnd;
    MSG msg;
    WNDCLASSEX wincl;

    // Rellenar la clase de ventana
    wincl.lpfnWndProc = WindowProcedure;
    wincl.lpszClassName = "Mi Clase";
    wincl.lpszMenuName = NULL;
    wincl.cbSize = sizeof(WNDCLASSEX);
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.style = CS_DBLCLKS;

    wincl.hInstance = hInstance;
    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;

    // Registrar la clase de ventana
    if(!RegisterClassEx(&wincl)) return 0;

    // Crear la ventana
    hWnd = CreateWindowEx(0, "Mi Clase", "Introducción a las matemáticas",
WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT,
                          HWND_DESKTOP, NULL, hInstance, NULL);

    // InsertarMenu
    InsertarMenu(hWnd);

    // Mostrar la ventana
    ShowWindow(hWnd, SW_SHOWDEFAULT);

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}


/*        WindowProcedure       */
LRESULT CALLBACK WindowProcedure(HWND hWindow, UINT Mensaje, WPARAM wParam,
LPARAM lParam)
{
        switch(Mensaje)
        {
            case WM_DESTROY:
                 PostQuitMessage(0);
                 break;
            default:
                 DefWindowProc(hWindow, Mensaje, wParam, lParam);
        }

        return 0;
}

void InsertarMenu(HWND hWindow)
{
     HMENU hBarraMenu, hMenu;

     hBarraMenu = CreateMenu();
     hMenu = CreateMenu();

     AppendMenu(hMenu, MF_STRING, CM_ABRIR, "&Abrir");
     AppendMenu(hMenu, MF_STRING, CM_GUARDAR, "&Guardar");
     AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);

     AppendMenu(hBarraMenu, MF_POPUP | MF_STRING, (UINT)hMenu, "&Archivo");

     SetMenu(hWindow, hBarraMenu);
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080806/ac61e528/attachment.html>


Más información sobre la lista de distribución Cconclase