Svish Skrevet 10. august 2006 Del Skrevet 10. august 2006 (endret) Har lagt inn Visual C++ 2005 Express og tenkte å friske opp litt før skolen starter igjen. Kan stort sett svømme når det gjelder C++ generelt. Lage klasser, printe i console osv osv. Men dette GUI surret sliter jeg maks med Noen som kan fortelle meg hva jeg trenger for å poppe opp et helt basic hello world vindu, muligens med en liten søt knapp på? yes, yes, I know, File -> New -> Project... -> Windows Forms Application -> Dra label og knapp inn på form. Men da kommer det for det første en hel masse drøss med rart jeg ikke fatter bæret av. Og for det andre såe... liker jeg å vite hvordan å gjøre det programmerisk.. dersom det skulle være et ord Så.. Hvis jeg nå går i Visual C++ 2005 Express, oppretter et nytt helt tomt prosjekt. Hva trenger jeg for å lage et enkelt lite vindu med en "Hello World" label, og kanske en knapp som gjør et eller annet spenstig? EDIT: burde kanskje vært posta i C++ delen.. litt frustrerende å ikke kunne flytte egne tråder egentlig. eller kan man det? Endret 10. august 2006 av Tussi_qwerty Lenke til kommentar
Giddion Skrevet 10. august 2006 Del Skrevet 10. august 2006 Jeg mener du har posta helt riktig jeg hmm.. GUI APIet til windows er utrolig komplisert (hvis du ikke har vært borti det før) stromcode.com denne siden går fra 0 til et portscan program. lykke til Lenke til kommentar
Svish Skrevet 10. august 2006 Forfatter Del Skrevet 10. august 2006 nei, GUI + C++ virker ikke akkurat som det letteste her i verden, hehe. Så ut som en ok tutorial ved første øyekast. Kan jo komme tilbake og anbefale den om den hjalp, hehe. takk for svar! Lenke til kommentar
Svish Skrevet 10. august 2006 Forfatter Del Skrevet 10. august 2006 hm, får stort sett bare at windows.h ikke finnes. virker som at jeg må installere Windows Platform SDK for at detta skal fungere? Lenke til kommentar
Giddion Skrevet 10. august 2006 Del Skrevet 10. august 2006 (endret) Vel de pleier vanligvis å følge med vc installasjonen (tror det var velgbart). Det burde være en mappe som heter platformSDK under vc direktivet. det er jo bare å søke. EDIT: det gjør ingenting å installer platformSDK, de pleier å ha med seg nyere ting og tang som XP SP2 forandringer. Endret 10. august 2006 av Giddion Lenke til kommentar
Svish Skrevet 10. august 2006 Forfatter Del Skrevet 10. august 2006 joda, men jeg har express versjonen, og den er uten det virker det som. Men nå er den lastet ned og innstallert. Må bare finne ut hvordan å mekke environment variablene så studioet vet at den er her Lenke til kommentar
Giddion Skrevet 10. august 2006 Del Skrevet 10. august 2006 Tools->option->projects and Solutions->VC++ Directories->"Show directories for" Resten finner du ut selv lykke til Lenke til kommentar
Svish Skrevet 10. august 2006 Forfatter Del Skrevet 10. august 2006 Wuhu!! Det funker. Puttet #include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Hello World!", "MsgBox", 0); return 0; } I en .cpp fil, kompilerte, og det spratt opp et vindu. Men en ting får jeg ikke til. og det er å få disse standard Win32 templatene og disse her i den new project velge saken. Erfaring med det noen? Stod man skulle kommentere ut 4 linjer i en fil, og 1 linje i en annen. Det er nå gjort, men ingen forskjell Lenke til kommentar
Svish Skrevet 10. august 2006 Forfatter Del Skrevet 10. august 2006 (endret) skulle visst ikke vært så optimistisk så fort... kan noen forklare meg hvorfor jeg med denne koden her: #include <windows.h> WNDCLASSEX WndClsEx; // Populate the WNDCLASSEX structure WndClsEx.cbSize = sizeof(WNDCLASSEX); WndClsEx.style = CS_HREDRAW | CS_VREDRAW; WndClsEx.lpfnWndProc = WndProcedure; WndClsEx.cbClsExtra = 0; WndClsEx.cbWndExtra = 0; WndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClsEx.hCursor = LoadCursor(NULL, IDC_ARROW); WndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndClsEx.lpszMenuName = NULL; WndClsEx.lpszClassName = "GlowdotWin32TutorialPartI"; WndClsEx.hInstance = hInstance; WndClsEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Register the class RegisterClassEx(&WndClsEx); får alle disse feilene her når jeg prøver å kompilere? Skjult tekst: (Marker innholdet i feltet for å se teksten): .\Program.cpp(5) : error C2143: syntax error : missing ';' before '.'.\Program.cpp(5) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(5) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(6) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(6) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(7) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(7) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(8) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(8) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(9) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(9) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(10) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(10) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(11) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(11) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(11) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(12) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(12) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(12) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(13) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(13) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(13) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(14) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(14) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(14) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(15) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(15) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(15) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(16) : error C2143: syntax error : missing ';' before '.' .\Program.cpp(16) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(16) : error C2371: 'WndClsEx' : redefinition; different basic types .\Program.cpp(3) : see declaration of 'WndClsEx' .\Program.cpp(18) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .\Program.cpp(18) : error C2365: 'RegisterClassExA' : redefinition; previous definition was 'function' C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\winuser.h(3653) : see declaration of 'RegisterClassExA' .\Program.cpp(18) : error C2440: 'initializing' : cannot convert from 'WNDCLASSEX *' to 'int' There is no context in which this conversion is possible Når jeg holder musa over WndClsEx i koden der hvor jeg prøver å sette struct elementene, så sier den at den er en int? trodde det var en struct jeg hvordan får jeg den til å bli den structen? prøvde å ha den typedef saken for WNDCLASSEX med, men da fikk jeg beskjed om at den allerede var deklarert, og det er jo logisk nok... Endret 10. august 2006 av Tussi_qwerty Lenke til kommentar
Giddion Skrevet 10. august 2006 Del Skrevet 10. august 2006 hehe den koden burde vel befinne seg i en funksjon? Lenke til kommentar
Svish Skrevet 10. august 2006 Forfatter Del Skrevet 10. august 2006 som vil si? kunne du[noen] tenkt deg å lage en ekstreeemt enkel sak som bare sprutter opp et tomt vindu? finner ingen rene enkle eksempler har en pdf på disken som heter Programming Game AI By Example. og er nå igjennom store deler av første kapittellet, der den startet med å introdusere disse tingene veldig bra. og det er en smule frustrerende for jeg skjønner mer eller mindre de forskjellige tingene og sakene man må gjøre for å få opp et vindu, bare ikke hvor jeg skal ha de for å få de til å funke sammen i boka er koden nemlig splittet opp, som den jo forsåvidt bør være. men den er ikke samlet noe sted, annet enn på cden som.. "følger med".. den har på en måte ikke jeg.. hehe. Lenke til kommentar
Giddion Skrevet 11. august 2006 Del Skrevet 11. august 2006 (endret) Her er en kode som vil åpne et vindu som du kan gjøre alle standard tingene med som resize lukke legge ned(tror jeg). Jeg tror ikke du kan få det stort enklere. PS: husk å kompiler med <Use Multi-Byte Character Set> Skjult tekst: (Marker innholdet i feltet for å se teksten): #include <windows.h> const char sKlassName[] = "VinduKlasse"; LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) // her kommer alle meldinger fra windows og programmer inn { switch(msg) //meldings ID { case WM_CLOSE: // På tide på slutte DestroyWindow(hwnd); break; case WM_DESTROY: //et vindu er blitt ødelagt (burde komme etter DestroyWindow(hwnd)) PostQuitMessage(0); //programmet avslutter break; } return DefWindowProc(hwnd, msg, wParam, lParam); // windows behandler også meldingene på sin vanlige måte. } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG Msg; //registrering av vindu klassen 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 = sKlassName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) { MessageBox(NULL, "klasse registreringen gikk ikke bra :(","Feil",MB_ICONEXCLAMATION | MB_OK); return 0; } // Lage vinduet hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, sKlassName, "Zuper vindu", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL); if(hwnd == NULL) { MessageBox(NULL, "Vindu laginga gikk ikke bra :(", "Feil", MB_ICONEXCLAMATION | MB_OK); return 0; } ShowWindow(hwnd, nCmdShow); //viser vinduet som er blitt laga (det er skult som standard) UpdateWindow(hwnd); // meldings loopen, den er ferdig når programmet blir avsluttet while(GetMessage(&Msg, NULL, 0, 0) > 0)//GetMessage venter til det kommer noen meldinger (dvs bevege musa trykke en tast ++ mange andre) { TranslateMessage(&Msg); //oversetter tastetrykk og sånt no DispatchMessage(&Msg); //sender meldingen til WndProc (ikke direkte) } return Msg.wParam; // på tide å slutte } EDIT: skjul koden EDIT2: lett feil i koden Endret 11. august 2006 av Giddion Lenke til kommentar
Svish Skrevet 11. august 2006 Forfatter Del Skrevet 11. august 2006 (endret) ahhh, den kompilerte og spratt opp. du er min helt, hehe. Skal prøve å ikke plage deg mer på en stund skal gå den grundigere i sømmene etter hvert, når jeg bare har tid men bare en ting: "kompiler med <Use Multi-Byte Character Set>"? hva i alle dager vil det si Endret 11. august 2006 av Tussi_qwerty Lenke til kommentar
lnostdal Skrevet 11. august 2006 Del Skrevet 11. august 2006 Legge til at det kan være greit (okei, helt essensielt IMHO) å bruke et annet bibliotek/API fremfor å jobbe direkte mot Win32-APIet. Søk på "GUI" i C/C++-forumet så får du opp en drøss forslag du kan se igjennom. Man får en rekke fordeler i tillegg til at det blir mye lettere å jobbe med. Eksempler er portabilitet til, eller mulighet til å kjøre programmet på både Mac, Linux og Windows. Lenke til kommentar
Svish Skrevet 11. august 2006 Forfatter Del Skrevet 11. august 2006 joda, det er jeg fullt klar over Inostdal. Bare er det at jeg som 3 års-student på dataingeniørstudiet føler jeg i hvert fall burde vite hvordan å putte opp et basic vindu i C++ dessuten så leser jeg en bok om no algoritme greier og slikt, der dem bruker basic win32 apiet for å kunne fokusere på algoritmene. eller no sånt... uansett, jeg vil få til men får vel se litt på disse GUI tingene også etterhvert. Og til Giddeon: haha, nå skjønner jeg hvorfor jeg ikke har fått til noe. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { } Fikk ikke med meg at en måtte ha med det der. Raste forbi og tenkte det var en vanlig funksjon av no slag Så bare for å være helt sikker: det der er altså windowsgui sin versjon av int main() { } ? Lenke til kommentar
Giddion Skrevet 13. august 2006 Del Skrevet 13. august 2006 Fikk ikke med meg at en måtte ha med det der. Raste forbi og tenkte det var en vanlig funksjon av no slag Så bare for å være helt sikker: det der er altså windowsgui sin versjon av int main() { } ? 6655614[/snapback] Jepp det stemmer ved bruk av winmain så bruker man windows subsystem og det blir da start funksjonen, men det er ikke noe problem å bruke main()" heller, men da brukes console subsystem som forsåvidt går greit det også, men da kan det sprette opp et console vindu som ofte er uønsket i windows. Det virker som om winmain også lager en vanlig main funsjon som er den vanlige start kommandoen for dos. Den printer bare ut "kan ikke kjøre i windows". Lykke til videre Lenke til kommentar
GeirGrusom Skrevet 17. august 2006 Del Skrevet 17. august 2006 mmm, nei. "This program cannot be run in DOS mode" er faktisk et eget program, som du ikke kan endre selv, det er et DOS program som følger med alle Windows programmer, for hvis det ikke var noe DOS del i et dos program, og du kjørte det i DOS, er det veldig sannsynlig at maskinen fryser. DOS og windows nt er to forskjellige ting. I headeren står BaseOfCode som er entrypoint til programmet, og den peker til Main eller WinMain. Men hvis det er WinMain, så blir en annen Windows funksjon kalt, for å gi programmet all data den trenger. om du bruker Main eller WinMain spiller forsåvidt ingen rolle for om det kommer opp et console vindu eller ikke, dette er det Subsystem verdien som forteller som kan være: IMAGE_SUBSYSTEM_UNKNOW Ukjent, vet ikke hva denne egentlig er til IMAGE_SUBSYSTEM_NATIVE Programmet har ikke noe subsystem IMAGE_SUBSYSTEM_WINDOWS_GUI Som er Windows GUI IMAGE_SUBSYSTEM_WINDOWS_CUI Som er windows Console IMAGE_SUBSYSTEM_OS2_CUI OS/2 console IMAGE_SUBSYSTEM_POSIX_CUI Posix console IMAGE_SUBSYSTEM_NATIVE_WINDOWS Windows 9x IMAGE_SUBSYSTEM_WINDOWS_CE_GUI WIndows CE IMAGE_SUBSYSTEM_EFI_APPLICATION IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER IMAGE_SUBSYSTEM_EFI_ROM IMAGE_SUBSYSTEM_XBOX Det er regler for hva startup funksjonen skal hete, du kan ikke bruke WinMain uten å inkludere Windows.h f.eks. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå