Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:01 Der er 56 kommentarer og
3 løsninger

Første C++ program

Hej!

Jeg er ca. lidt under halvejs, i Kris Jamsa's bog/hæfte C++.
Men jeg har endnu ikke lavet mit første Program.
Jeg bruger Dev-C++, og jeg søger en, der vil skrive en guide til hvordan man får en exe fil ud af denne:

#include <iostream>

using namespace std;

int main()// Brug altid int (dette betyder at main retunerer noget til os'et
{
cout<<"Hej";
return 0; // Betyder at programmet retunerer 0 til os'et
}

Jeg har fået en exe fil, men når man klikker på exe filen, sker der ikke noget. (Dog kun hvis man lader standard koden stå, fra man har valgt Nyt project ->> Windows Application. Er det forresten den rigtige??)

På forhånd tak :o)

MVH
Anders
Avatar billede arne_v Ekspert
21. maj 2003 - 20:02 #1
Prøv lige og erstat:

cout<<"Hej";

med:

cout << "Hej" << endl;
Avatar billede arne_v Ekspert
21. maj 2003 - 20:03 #2
Og du skal vælge "Console Application" ikke "Windows Application".
Avatar billede teepee Nybegynder
21. maj 2003 - 20:04 #3
Er du sikker på at der ikke sker noget?
Prøv at sætte
system("PAUSE");
ind efter din cout.
Måske skal der includes stdlib.h eller sådan noget lignende.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:09 #4
Takker nu sker der noget :o)

Men: Det er jo et windows program jeg vil lave (Dvs. med file menu osv.), og der kommer man vel ikke langt med en Console Application??
Avatar billede arne_v Ekspert
21. maj 2003 - 20:12 #5
Hvis du vil lave en GUI applikation med file menu og det hele
så skal du vælge "Windows Application", men så kan du ikke bruge
cout !

Den hører console apllikationer til.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:17 #6
Altså dvs. hvis man skulle lave et notepad lignende program, kan man ikke bruge de ting, der står i f.eks. Kris Jamsa's C++? Det er jo ikke så tit man har noget at bruge Console Programmer til.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:19 #7
Er det noget helt andet, at lave windows applikationer, eller er syntaksen den samma?
Avatar billede soreno Praktikant
21. maj 2003 - 20:19 #8
GUI programmering er et helt kapitel for sig. Før du går igang med det bør du have fundamentet i orden.

Men hvis du vil springe ud i det så kig her:
http://www.winprog.org/tutorial/
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:21 #9
Jeg får snart foræret 4 Microsoft bøger om C++.

Tror i ikke helt sikkert man lærer noget om Windows programmering der?

(Det er både lærebøger & manualer.)
Avatar billede soreno Praktikant
21. maj 2003 - 20:21 #10
Syntaksen er den samme. Det er "bare" en række funktioner/metoder der kaldes i en mere eller mindre bestemt rækkefølge.
Avatar billede arne_v Ekspert
21. maj 2003 - 20:21 #11
Samme syntax men et helt andet framework.

Ikke nogen main, ikke nogen cout etc. men en masse Windows specifik i.s.f..
Avatar billede soreno Praktikant
21. maj 2003 - 20:23 #12
Sansynligvis vil de lære dig noget om win32 programmering (jeg gætter dog på det er MFC :-). Men de vil helt sikkert også forudsætte indgående kendskab til C/C++ programmering.
Avatar billede arne_v Ekspert
21. maj 2003 - 20:23 #13
Her er et eksempel som jeg engang lavede:

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT ("Test") ;
    HWND        hwnd ;
    MSG          msg ;
    WNDCLASS    wndclass ;

    wndclass.style        = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc  = WndProc ;
    wndclass.cbClsExtra    = 0 ;
    wndclass.cbWndExtra    = 0 ;
    wndclass.hInstance    = hInstance ;
    wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = NULL ;
    wndclass.lpszClassName = szAppName ;

    if (!RegisterClass (&wndclass))
    {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
    }

    hwnd = CreateWindow (szAppName,
                          TEXT ("AVU Win32 GUI"),
                          WS_OVERLAPPEDWINDOW,       
                          CW_USEDEFAULT,             
                          CW_USEDEFAULT,             
                          CW_USEDEFAULT,             
                          CW_USEDEFAULT,             
                          NULL,                     
                          NULL,                     
                          hInstance,                 
                          NULL) ;                   
   
    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;
   
    while (GetMessage (&msg, NULL, 0, 0))
    {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC        hdc ;
    PAINTSTRUCT ps ;
    RECT        rect ;
   
    switch (message)
    {
    case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;
         
          GetClientRect (hwnd, &rect) ;
         
          DrawText (hdc, TEXT ("Testing!"), -1, &rect,
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
         
          EndPaint (hwnd, &ps) ;
          return 0 ;
         
    case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
}

(og det er altså kun et program af hello world typen)
Avatar billede soreno Praktikant
21. maj 2003 - 20:24 #14
Man kan nu altså godt bruge main som entry point til win32 applikationer.

Forskellen er måden der linkes på (et par bits er forskellige i exe filens header) hvilket resulterer i om der vises en console eller ej.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:25 #15
Okay, det virker jo fint.! Men tror i man lærer om Windows Programmering i de bøger jeg får?
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:26 #16
soreno ->> Vil det sige at man kan programmere et windows program, men "Hej" eksemplet i spørgsmålet?
Avatar billede soreno Praktikant
21. maj 2003 - 20:28 #17
Nej, for du skal vise et vindue før der kommer noget frem på skærmen.

Men man kan godt have et vindue og en console på samme tid (jeg har brugt det til simpel debugging).
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:29 #18
ok. Hvad med de bøger ?? *G*
Avatar billede soreno Praktikant
21. maj 2003 - 20:30 #19
Kig på førnævnte link:
http://www.winprog.org/tutorial/

Der står det du skal bruge for at komme igang.

Lidt groft sagt kan man sige at hvis der er noget i den tutorial du ikke forstå så er det fordi du har huller i din forståelse for C/C++ (altså er fundamentet ikke i orden).

(Jeg vil ikke anbefale at starte med GUI programmering - var budskabet.)
:-)
Avatar billede soreno Praktikant
21. maj 2003 - 20:31 #20
Som tidligere skrevet:

Sansynligvis vil de lære dig noget om win32 programmering (jeg gætter dog på det er MFC :-). Men de vil helt sikkert også forudsætte indgående kendskab til C/C++ programmering.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:33 #21
Nej nej. Jeg starter skam ikke med det :o)

Jeg læser først, C++ hæftet, og derefter Maz Sporks, og så de 4 Microsoft C++ bøger. (Tror i forresten der står noget om Windows programmering der hehe)
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:33 #22
Ok. Hvad er det lige MFC er?
Avatar billede arne_v Ekspert
21. maj 2003 - 20:34 #23
MFC = Microsoft Foundation Classes = meget stort C++ library til Windows
Avatar billede soreno Praktikant
21. maj 2003 - 20:35 #24
Du skal ikke kun læse. Du skal også forstå.
Det involverer masser af kodning af simple ting (de fleste bøger plejer at have opgaver efter hvert kapitel - kan du løse dem har du også forstået hvad kapitlet går ud på).

Altså, få masser af praktisk erfaring.
Avatar billede arne_v Ekspert
21. maj 2003 - 20:35 #25
Windows API er ren C.

Men MFC er objekt orienteret.
Avatar billede arne_v Ekspert
21. maj 2003 - 20:36 #26
Søren>

Jge var ikke klar over at man kunne have en blandet GUI & console
applikation - er et "officielt" eller virker det bare ?
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:38 #27
ok. Men det gør vel ikke noget hvis det er MFC så?
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 20:39 #28
Kræver MFC noget som helst installeret på klienten? Jeg tænker ligesom Java..
Avatar billede soreno Praktikant
21. maj 2003 - 20:41 #29
Well, jeg læste engang i specifikationen på PE (eller var det MZ) headeren at console er en bit der sættes (men jeg kunne ikke få offset til at passe da jeg ville checkke efter, så jeg har ikke gravet mere rundt i det).

Hvis console vises så kan man skrive til den, hvilket er en dejlig ting når man vil udskrive lidt debug info (rart at kunne følge med i realtime).
Avatar billede arne_v Ekspert
21. maj 2003 - 20:41 #30
MFC er noget man får med Microsoft Visual Studio.
Avatar billede soreno Praktikant
21. maj 2003 - 20:42 #31
MFC er "bare" en masser kald af funktioner i dll filer. Hvis du har disse dll filer så kan du køre MFC applikationer. De fleste har de dll filer.

Du kan læse lidt om win32 vs. MFC her:
http://www.winprog.org/tutorial/apivsmfc.html
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:26 #32
OK. Den tutorial, du linkede til, soreno er det win32 eller MFC? For jeg vil ikke have sådan noget med at brugeren SKAL have nogle filer, for at kunne køre programmet.

Men f.eks. spil, som er fuld skærm. Kan detgodt programmeres i Console Application?
Avatar billede soreno Praktikant
21. maj 2003 - 21:28 #33
Det er en win32 tutorial.

For at lave et spil i fullscreen skal du lave et vindue (det er i øvrigt de færreste spil der er sjove i console mode..).

Altså et GUI program.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:30 #34
ok. Måske et dumt spm. men hvad så hvis man kører win16? (Er newbie til c++, så jeg har ingen anelse.)
Avatar billede arne_v Ekspert
21. maj 2003 - 21:30 #35
Winprog er WIN API ikke MFC.

Du har lov til at distribuere MFC runtime med dit program, så det er ikke
noget problem.

Men du skal have MS VC++ for at bruge MFC. Dev-cpp duer ikke.
Avatar billede soreno Praktikant
21. maj 2003 - 21:31 #36
win16 er slet ikke relevant mere. Det var det da vi kørte windows 3.x og tidligere.
Avatar billede arne_v Ekspert
21. maj 2003 - 21:32 #37
Hvis du bruger Windows 3.1 eller WfW 3.11 så skal du have fat
på en 16 bit C++ compiler.

MCS VC++ 1.5 eller BCB 3.1 er de sidste hvis jeg husker rigtigt.

WIN API er stort set det samme (ihvertfald hvis man koder *meget* pænt).

MFC eksisterer mig bekendt ikke på 16 bit.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:32 #38
Jo,men jeg kender en der stadig kører win16, og har me. Han påstår at der er mange flere ting der kan køre så :o)
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:33 #39
Nej, jeg kører win32
Avatar billede arne_v Ekspert
21. maj 2003 - 21:34 #40
Hov hov.

Windows ME er også Win32.

NT 3.1, NT 3.5, NT 3.51, NT 4.0, 2000, XP, 95, 98, 98 SE, ME er
alle Win32.
Avatar billede soreno Praktikant
21. maj 2003 - 21:34 #41
win32 er mere eller mindre kompatibel med win16. Men at udvikle programmer i win16 vil være dumt (med mindre man bruger win3.x )
Avatar billede arne_v Ekspert
21. maj 2003 - 21:35 #42
Det er kun 2.0, 3.0, 3.1 og 3.11 der er Win16.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:36 #43
Okay, altså man kan vælge mellem:

    Win32
    MFC
    WIN API

eller hva?

Hvad er så bedst, Win32 eller WIN API?
Har ikke MVC C++, så MFC duer jo ikke.
Avatar billede arne_v Ekspert
21. maj 2003 - 21:36 #44
Der er dog visse forskelle på forskellige versioner af Win32.

Men hvis du holder dig til det mest gængse i WIN API og MFC
får du ikke problemer.
Avatar billede arne_v Ekspert
21. maj 2003 - 21:37 #45
Win32 er en platform

WIN API er et C API for både Win16 og Win32 platform

MFC er en objekt orienteret (C++) overbygning for WIN API på Win32 platform
Avatar billede soreno Praktikant
21. maj 2003 - 21:38 #46
Windows består af win32.
MFC er et bibliotek som bygger oven på win32 (altså win32 gjort objekt orienteret).
Borland har også et bibliotek som bygger ovenpå win32 (hedder vist VCL).

Alt hvad du kan med MFC kan du også med win32 - men ikke nødvendigvis omvendt.
win32 er også mere end bare vinduer og knapper. Det er et API som giver mulighed for I/O (både filer og netværk) samt processkontrol.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:39 #47
Okay. Men WIN API er ikke specielt beregnet til C?
Avatar billede arne_v Ekspert
21. maj 2003 - 21:41 #48
Du kan bruge WIN API i både C, C++ og sågar Delphi !
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:41 #49
Hvad er OWL så? (Det står i den her bog)
Avatar billede arne_v Ekspert
21. maj 2003 - 21:41 #50
MFC er også mere end GUI.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:42 #51
hvad mener du?
Avatar billede arne_v Ekspert
21. maj 2003 - 21:43 #52
OWL tror jeg også er noget Borland !?

(men jeg kan ikke huske hvad det er)
Avatar billede arne_v Ekspert
21. maj 2003 - 21:44 #53
Jeg tror at OWL = Object Windows Library
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:44 #54
Der står løsninger til forskellige ting, i bogen windows programmering med C og C++. Der er både til MFC og OWL, og til flere.
Avatar billede soreno Praktikant
21. maj 2003 - 21:45 #55
http://www.sju.edu/~jhodgson/gui/owl.html
skriver:

Borland's OWL programming environment is suimialr to Microsoft's MFC environment, with just enough differences to be a nuisance.
Avatar billede snuseren.dk Nybegynder
21. maj 2003 - 21:45 #56
Ja det står der forresten også.

Det står som du siger for Object Windows Library, og er lavet af Borland :o)
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 13:46 #57
Arne, kan du ikke lige ligge et svar?
Avatar billede arne_v Ekspert
22. maj 2003 - 13:49 #58
OK
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 13:55 #59
Men WinApi, er det kun til grafikken, eller skal alle funkionerne m.m. også laves i WinApi?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester