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?
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?
Mi da 2 errori...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 pare di ave capito che mi cerca il main... infatti se metto il main non mi da nessun errore... perchè?codice:error LNK2019: riferimento al simbolo esterno _main non risolto nella funzione ___tmainCRTStartup MSVCRTD.lib fatal error LNK1120: 1 esterni non risolti
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
più che altro ora come ora il problema è l'entry point del programma.... devo mettere il main??? e perchè no il WinMain?
Devi dire al compilatore che non è un'applicazione console ma un'applicazione Win32 a finestre.
Amaro C++, il gusto pieno dell'undefined behavior.
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
Devi scegliere "Applicazione Windows", quindi non dovrebbe più darti errori di linker.
Amaro C++, il gusto pieno dell'undefined behavior.
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...
Questo ti crea un progetto in C++ Managed (che si appoggia al .NET Framework). Stanne lontano, almeno per i primi tempi.Originariamente inviato da Il Pazzo
Ti ringrazio... risolto.. però c'era solo "Progetto Windows Form" che il form me lo creava da solo....
Applicazione Console = in generale mette di default i settaggi per creare un'applicazione console (ossia con il main normale)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 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.
come si fa a mostrare sullo schermo il form?
#include <pgnvni.h>
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; }