Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Programma API Win32

    Mi sto esercitando con le API di Win32 e avrei una domande da fare.
    Questo è il primo programma che ho creato, e mostra semplicemente una finestra: il problema è che oltre al programma mi appare la finestra del DOS API.jpg: come posso fare affinchè non venga visualizzata?

    Questo è il codice del programma, e il compilatore che uso è MinGW 4.8.1 g++:

    codice:
    #include <windows.h>
    const char g_szClassName[] = "myWindowClass";
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
        case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
        PostQuitMessage(0);
        break;
        default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
        }
        return 0;
        }
        int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int nCmdShow)
    {
        WNDCLASSEX wc;
        HWND hwnd;
        MSG Msg;
            wc.cbSize = sizeof(WNDCLASSEX);
            wc.style = 0;
            wc.lpfnWndProc = WndProc;
            wc.cbClsExtra = 0;
            wc.cbWndExtra = 0;
            wc.hInstance = hInstance;
            wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
            wc.hCursor = LoadCursor(NULL, IDC_ARROW);
            wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
            wc.lpszMenuName = NULL;
            wc.lpszClassName = g_szClassName;
            wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
        if(!RegisterClassEx(&wc))
        {
            MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
        hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "The title of my window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);
        if(hwnd == NULL)
        {
            MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
        while(GetMessage(&Msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
            return Msg.wParam;
    }

  2. #2
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ho provato a seguire le risposte in quel post, ma non funziona: la finestra DOS appare sempre

  4. #4
    Esattamente com'è la linea di comando che stai usando per compilare?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Puoi provare a chiuderla da programma
    codice:
    HWND hWnd = GetConsoleWindow();
    ShowWindow( hWnd, SW_HIDE );
    Saluti

  6. #6
    Quote Originariamente inviata da king64 Visualizza il messaggio
    Puoi provare a chiuderla da programma
    No per carità questo è risolvere i problemi nascondendo la polvere sotto il tappeto (e tra l'altro si ottiene l'antiestetico effetto della finestra che appare per un istante all'avvio e scompare subito). Il modo corretto è fare sì che l'eseguibile generato sia marcato per il sottosistema GUI e e non console, cosa che si fa con flag del compilatore.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.