Pagina 1 di 8 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 75
  1. #1
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071

    [C++] Creazione Form

    Ciao a tutti.. sto cercando di creare il mio primo form... utilizzando le API... ma non ci riesco... ho anche copiato l'esempio riportato nell'MSDN e la cosa bella è che mi da più errori di quanto ne dava il mio... qualcuno ha un suggerimento?

  2. #2
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    codice:
    #include<windows.h>
    INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    				   LPSTR lpCmdLine, int nCmdShow ){
    
    	//Dichiaro una variabile per creare la mia finestra
    	WNDCLASSEX Form;
    
    	Form.cbSize = sizeof(WNDCLASSEX);
    	return 0;
    }
    Mi da 2 errori...

    codice:
    error LNK2019: riferimento al simbolo esterno _main non risolto nella funzione ___tmainCRTStartup	MSVCRTD.lib
    
    fatal error LNK1120: 1 esterni non risolti
    mi pare di ave capito che mi cerca il main... infatti se metto il main non mi da nessun errore... perchè?

    P.S.: Non so quanti di voi abbiano seguito la conversazione che ho avuto con Oregon... Mi ha detto di iniziare con queste cose... vero? o sto sbagliando?

    grazie

  3. #3
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    più che altro ora come ora il problema è l'entry point del programma.... devo mettere il main??? e perchè no il WinMain?

  4. #4
    Devi dire al compilatore che non è un'applicazione console ma un'applicazione Win32 a finestre.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Penso di averlo fatto... allora... apro il mio visual studio:

    File -> Nuovo -> Progetto -> Visual C++ -> Applicazione Console Win32... gli metto il nome e OK

    Poi... clicco su Avanti e in Impostazioni applicazione metto il visto in "Progetto Vuoto" e tipo di applicazione ho provato sia "Applicazione Windows" che "Applicazione console" infine clicco su Fine.... (è quanto ho capito dall'MSDN... e spero che sia ciò che oregon mi ha detto di fare... spero di non aver sbagliato)

    Eppure non va in nessuno dei due casi... se non è uno di quesi due progetti, quale devo fare? e questi due a che servono allora?

    Grazie ancora

  6. #6
    Devi scegliere "Applicazione Windows", quindi non dovrebbe più darti errori di linker.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Ti ringrazio... risolto.. però c'era solo "Progetto Windows Form" che il form me lo creava da solo.... allora ho optato per il "Progetto Win32"... anche qui due opzioni "Applicazione Windows" o "Applicazione Console"... il WinMain funziona in entrambi.... ora ho bisogno di chiarimenti (che sull'MSDN non ho trovato)....

    Non capisco la differenza di queste 4 cose:

    - Applicazione Console Win32 -> Applicazione console;

    - Applicazione Console Win32 -> Applicazione windows (eppure il WinMain non funziona);

    - Applicazione Win32 -> Applicazione console (Eppure qui il WinMain funziona)

    - Applicazione Win32 -> Applicazione windows;


    Dov è la differenza???

    Vi ringrazio anche per le pochissime parola chiarificatrici...

  8. #8
    Originariamente inviato da Il Pazzo
    Ti ringrazio... risolto.. però c'era solo "Progetto Windows Form" che il form me lo creava da solo....
    Questo ti crea un progetto in C++ Managed (che si appoggia al .NET Framework). Stanne lontano, almeno per i primi tempi.
    Non capisco la differenza di queste 4 cose:

    - Applicazione Console Win32 -> Applicazione console;

    - Applicazione Console Win32 -> Applicazione windows (eppure il WinMain non funziona);

    - Applicazione Win32 -> Applicazione console (Eppure qui il WinMain funziona)

    - Applicazione Win32 -> Applicazione windows;


    Dov è la differenza???
    Applicazione Console = in generale mette di default i settaggi per creare un'applicazione console (ossia con il main normale)
    Applicazione Win32 = mette di default i settaggi per creare un'applicazione a finestre (ossia con il WinMain).
    Le proprietà che le procedure guidate impostano sono comunque modificabili in seguito nelle proprietà del progetto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83
    come si fa a mostrare sullo schermo il form?
    #include <pgnvni.h>

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Esempio di creazione di una semplice finestra vuota:

    codice:
    #define STRICT
    #include <windows.h>
    
    #define MAIN_WNDCLASS   "MiaClasseFinestra"
    
    LRESULT CALLBACK Main_WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
            case WM_CREATE:
                return 0;
    
            case WM_PAINT:
            {
                HDC hdc;
                PAINTSTRUCT ps;
    
                hdc = BeginPaint (hWnd, &ps);
    
                EndPaint (hWnd, &ps);
                return 0;
            }
    
            case WM_DESTROY:
                PostQuitMessage (0);
                return 0;
    
            case WM_CLOSE:
                DestroyWindow (hWnd);
                return 0;
        }
    
        return DefWindowProc (hWnd, uMsg, wParam, lParam);
    }
    
    
    INT APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpszCmdLine, INT iCmdShow)
    {
        WNDCLASSEX  wcx;
        HWND        hWnd;
        MSG         msg;
    
        wcx.cbSize        = sizeof (wcx);
        wcx.style         = CS_HREDRAW | CS_VREDRAW;
        wcx.lpfnWndProc   = (WNDPROC) Main_WndProc;
        wcx.cbClsExtra    = 0;
        wcx.cbWndExtra    = 0;
        wcx.hInstance     = hInstance;
        wcx.hIcon         = NULL;
        wcx.hIconSm       = NULL;
        wcx.hCursor       = LoadCursor (NULL, IDC_ARROW);
        wcx.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
        wcx.lpszMenuName  = NULL;
        wcx.lpszClassName = MAIN_WNDCLASS;
    
        if (!RegisterClassEx (&wcx))
        {
            MessageBox (NULL, "Errore nella registrazione della classe",
                        "ERRORE", MB_OK | MB_ICONEXCLAMATION);
            return 1;
        }
    
        hWnd = CreateWindow (MAIN_WNDCLASS, "Titolo finestra", WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT, 0, 300, 300,
                             NULL, NULL, hInstance, NULL);
    
        if (hWnd == NULL)
        {
            MessageBox (NULL, "Errore nella creazione della finestra",
                        "ERRORE", MB_OK | MB_ICONEXCLAMATION);
            return 1;
        }
    
        ShowWindow (hWnd, SW_SHOWNORMAL);
        UpdateWindow (hWnd);
    
        while (GetMessage (&msg, NULL, 0, 0))
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
    
        return 0;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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.