www.mikrocontroller.net

Forum: PC-Programmierung Visual C++ Express - Hello World


Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich habe mir als C- Programmiereinstieg das Buch "C Programmieren von 
Anfang an" von Helmut Erlenkötter gekauft, und bin begeistert. Nun habe 
ich mir den kostenlosen Visual C++ Express - Compiler von Microsoft 
runtergeladen. Dann hab ich neues Projekt/ Win32 / Win32- 
Konsolenanwendung / Name: Hallo Welt / Anwendungstyp: Windows- Anwendung 
/ Fertig Stellen gemacht, und dann kommt im Programmfenster schon ein 
wenig Code.
Anschliessend hab ich meinen eigenen Hallo Welt Code:

#include <stdio.h>
main() {
   printf("\nHallo Welt!")
}

ans Ende des schon existierenden Codes geschrieben, und dann auf das 
kleine, grüne Dreieck geklickt. Es kam ein kleines Fenster mit Code 
veraltet - Erstellen?, welches ich mit Ja beantwortet habe. Nun kam eine 
Fehlermeldung, und Visual C++ wollte, dass ich vor main noch ein int 
hinschreibe. Hab ich dann auch gemacht, wieder aufs Dreieck geklickt, 
und diesmal hats geklappt. Dann wollte ich das exe- Programm starten, 
was auch geklappt hat, aber es kam nur ein weißes Programmfenster ohne 
den Text "Hallo Welt".

Nun meine Frage: Was hab ich falsch gemacht???
Ich weiß nicht mehr weiter.......

Vielen Dank schon einmal im Voraus.
Grüße, Steffen

: Gesperrt durch Moderator
Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Anwendungstyp "Windows-Anwendung" ist mit hoher Wahrscheinlichkeit 
nicht korrekt.

Das ist eine "Konsolenanwendung" (oder wie auch immer das im 
eingedeutschten Tool heißen mag).

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wenn ich anstatt Windows- Anwendung Konsolenanwendung einstelle, und 
alles mache wie vorhin, dann erscheint kurz die Kommandozeile auf dem 
Bildschirm, verschwindet allerdings sofort wieder.
Ich hab noch einen Fehler in meinem Programm gefunden. So muss es 
aussehen:

#include <stdio.h>
main() {
   printf("\nHallo Welt!");
}

Hab das Semikolon nach der printf- Anweisung vergessen........

Grüße, Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen O. wrote:

> wenn ich anstatt Windows- Anwendung Konsolenanwendung einstelle, und
> alles mache wie vorhin, dann erscheint kurz die Kommandozeile auf dem
> Bildschirm, verschwindet allerdings sofort wieder.
> Ich hab noch einen Fehler in meinem Programm gefunden. So muss es
> aussehen:
>
> #include <stdio.h>
> main() {
>    printf("\nHallo Welt!");
> }
>
> Hab das Semikolon nach der printf- Anweisung vergessen........

... und das int vor main.
Die Funktion main muss immer einen int retournieren. Immer!

Zu deinem Problem:
Du kannst das Programm von der Command Line starten (DOS Box),
dann siehst du die Ausgabe.
Oder aber du kannst in das Programm dazu zwingen auf etwas zu
warten, was du steuern kannst, zb. irgendeine Eingabe
#include <stdio.h>

int main()
{
  char c;

  printf( "Halle World\n" );

  c = getchar();
}

Jetzt wartet das Programm am Ende drauf, dass du ein Zeichen
eingibst (plus Return drückst).

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie kann ich aus der Kommandozeile (cmd) mein geschriebenes Programm 
starten?
Wenn ich einfach den Pfad eingeb, wo mein Programm ist, dann kommt immer 
ne Fehlermeldung.....
Grüße, Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen O. wrote:
> Hallo,
> wie kann ich aus der Kommandozeile (cmd) mein geschriebenes Programm
> starten?
> Wenn ich einfach den Pfad eingeb, wo mein Programm ist, dann kommt immer
> ne Fehlermeldung.....
> Grüße, Steffen


Du startest als erstes mal die DOS Box, bei neueren Windowsen heist
das dann Command Line oder Eingabeaufforderung. Die findest du
normalerweise unter
 Start - Alle Programme - Zubehör - Eingabeaufforderung

Dadurch kriegst du ein Fenster, in dem eine ganz normale DOS
Command Line arbeitet, so wie man das vor Windows benutzt hat
um einen DOS-Computer zu steuern.
Diese Command Line versteht ein paar Befehle. Gib einfach mal
'Help' ein.
Ein Befehl ist zb 'cd'  (wie change directory)
cd \
bringt dich ins Wurzelverzeichnis deiner Festplatte. Dort
navigierst du mit weiteren cd's zu dem Verzeichnis in dem
dein Programm liegt. Liegt dein Programm zb im Verzeichnis \Test\Debug
dann gibst du ein
cd \test\debug
mit einem 'dir' (wie Directory) kannst du überprüfen ob du im
richtigen Verzeichnis bist. Dein EXE müsste dort auftauchen.
Um ein Programm zu starten gibst du einfach am richtigen Verzeichnis
den Namen des Programms ein. Heißt dein EXE also ERSTES.EXE
dann gibst du einfach ERSTES ein
C:\>
C:\> cd \test\debug
C:\test\debug> dir
 Volume in Laufwerk C: hat keine Bezeichnung
 Volumeseriennummer: 4D01-1EEB

 Verzeichnis von C:\test\debug

26.03.2008  13:36       1.234 ERSTES.EXE
      1 Datei(en)    1.234 Bytes

C:\test\debug> erstes
Hallo World
C:\test\debug>

> Wenn ich einfach den Pfad eingeb, wo mein Programm ist, dann kommt
> immer ne Fehlermeldung.....

Und bitte gewöhn dir solche Aussagen ab. Die sind nicht hilfreich.
Die Fehlermeldung hat ja einen Zweck, der im Text der Fehlermeldung
steckt. Entweder der Text sagt dir selbst schon, was faul ist oder
du kommst nicht dahinter, was dir die Command Line sagen will. Dann
hilft es aber auch nichts, wenn du uns erzählst dass es eine Fehler-
meldung gibt. Denn wir können auch nicht hellsehen und die Fehler-
meldung erraten.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Vielen Dank für den Tip!!!!!
Ich hab jetzt das erste Programm in der Kommandozeile zum Laufen 
gebracht!!!!
Wie kann man das ganze jetzt noch als Windows- Fenster realisieren??
Ist nicht unbedingt wichtig, aber mich würde es noch interessieren.
Vielen Dank schon einmal im Voraus.
Grüße, Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen O. wrote:
> Hallo,
> Vielen Dank für den Tip!!!!!
> Ich hab jetzt das erste Programm in der Kommandozeile zum Laufen
> gebracht!!!!
> Wie kann man das ganze jetzt noch als Windows- Fenster realisieren??
> Ist nicht unbedingt wichtig, aber mich würde es noch interessieren.

Das erfordert schon einiges mehr an Arbeit.
Die einfachste Variante ist immer noch, wenn du deiner IDE eine
Konsolenanwendung aufträgst und am Ende des Programmes vom Benutzer
eine Engabe einforderst, dass jetzt dieses Fenster zu schliessen sei.

Alles andere ist mit C oder C++ deutlich mehr Aufwand.
In C: Da muss zunächst mal eine Fensterklasse registriert werden.
Dann braucht man eine sog. Window-Procedure, die von Windows aufgerufen
über die Message-Pump aufgerufen wird, wenn es etwas im Fenster zu
tun gibt, wie zb. das Fenster neu zu zeichnen. Innerhalb dieser
Window-Procedure wird dann an ein Device Context angefordert, der
der Zeichenfläche entspricht. Dann benötigt man noch einen Font,
der in den Device Context selektiert wird um dann schlussendlich
mit der Text Funktion den eigentlichen Text im gewählten Font auf
dem Device Context rendern zu lassen. Auch ist dann noch eine
zumindest rudimentäre Benutzerinteraktion erforderlich, denn das Fenster
soll sich ja auch schließen, wenn der Benutzer auf das X klickt.

In C++ mit der MFC erzeugt zwar der Wizard das vollständige Grundgerüst
dafür, ohne aber zu verstehen, was da abgeht ist es nicht sinnvoll
damit seine ersten Programmierschritte zu machen.

Mit dem neuen .NET Forms Geraffer ist es im Grunde ähnlich: Das vom
Wizard vordefinierte Framework geht über zig-Stufen um die gleichen
Aktionen auszuführen.

Wenn du gerade erst mit der Programmierung an sich angefangen hast,
dann bleib bei Konsolenanwendgunen. Damit bist du das nächste
halbe Jahr genug beschäftigt um die Grundlagen der Programmierung
zu erlernen, ohne dich in Fenstern zu verzetteln.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sonst halt die üblichen Verdächtigen mal ausprobieren: Visual Basic (ok, 
ich nehms zurück), oder Borland Delphi (bzw. Lazarus) und Borland C++ 
Builder, den es ja mittlerweile auch kostenlos gibt.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Vielen Dank erstmal.
Dann reicht mir die Konsole bis jetzt, und ich werde jetzt weiter C- 
Bücher wälzen.....
Grüße, Steffen

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst natürlich auch aus der WinMain sukzessive die MessageBox 
aufrufen. Dann hast dus "graphisch" ohne zuviel Aufwand

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab jetzt das mit dem Kommandofenster und so alles gemacht, und 
jetzt mein erstes kleines Programm zum ausrechnen des tagenauen Alters 
in Visual C++ geschrieben:
------------------------------------------------------------------------ 
-----
// Altersrechner.cpp : Definiert den Einstiegspunkt für die 
Konsolenanwendung.
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
  return 0;
}
#include <stdio.h>

int rechner(int gebtag, int gebmonat, int gebjahr, int alterstage, int 
monat, int tag, int jahr, int differenztage) {
  gebjahr=gebjahr-1900;
  alterstage=gebjahr*365;
  alterstage=alterstage+gebmonat*30,5;
  alterstage=alterstage+gebtag;
  jahr=jahr-1900;
  differenztage=jahr*365;
  differenztage=differenztage+monat*30,5;
  differenztage=differenztage+tag;
    alterstage=differenztage-alterstage;

}

int main () {
int 
tag,monat,jahr,wahl,gebtag,gebmonat,gebjahr,alterstage,differenztage;
printf ("\n Altersrechner");
printf ("\nBitte auswaehlen:");
printf ("\n 1.Person");
printf ("\n 2.Person");
printf ("\n 3.Person");
printf ("\n 4.Person");
printf ("\n 5.Person");
printf ("\n 6.Person");
printf ("\n 7.Person");
printf ("\n 8.Person");
printf ("\n 9.Person");
printf ("\n Nun gewuenschte Zahl eingeben: ");
scanf_s ("%i",&wahl);
printf ("\nBitte heutiger Tag eingeben: ");
scanf_s ("%i",&tag);
printf ("\nBitte jetziger Monat eingeben: ");
scanf_s ("%i",&monat);
printf ("\nBitte jetziges Jahr eingeben: ");
scanf_s ("%i",&jahr);
switch (wahl) {
case 1:
  gebtag=2,
  gebmonat=7,
  gebjahr=1993;
  printf("\nDiese Person ist %i Tage alt",rechner(alterstage));
  break;
case 2:
  gebtag=1,
  gebmonat=6,
  gebjahr=1995;
  printf("nDiese Person ist %i Tage alt",rechner(alterstage));
  break;
}
}
------------------------------------------------------------------------ 
---
Ich hab jetzt als Beispiel einfach mal in case 1 und 2 ein paar mögliche 
Geburtsdaten eingetragen. Mit dem Programm kann man z.B. von seiner 
ganzen Familie das Alter ausrechnen. Die cases habe ich noch nicht 
fertig geführt, aber das kann man ja leicht eintragen.
Wenn ich das ganze nun kompilieren möchte kommt folgende Fehlermeldung:
------------------------------------------------------------------------ 
---
------ Erstellen gestartet: Projekt: Altersrechner, Konfiguration: Debug 
Win32 ------
Kompilieren...
Altersrechner.cpp
c:\dokumente und einstellungen\steffen oesterwind\eigene dateien\visual 
studio 2008\projects\altersrechner\altersrechner\altersrechner.cpp(52) : 
error C2660: 'rechner': Funktion akzeptiert keine 1 Argumente

c:\dokumente und einstellungen\steffen oesterwind\eigene dateien\visual 
studio 2008\projects\altersrechner\altersrechner\altersrechner.cpp(58) : 
error C2660: 'rechner': Funktion akzeptiert keine 1 Argumente

Das Buildprotokoll wurde unter "file://c:\Dokumente und 
Einstellungen\Steffen Oesterwind\Eigene Dateien\Visual Studio 
2008\Projects\Altersrechner\Altersrechner\Debug\BuildLog.htm" 
gespeichert.

Altersrechner - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 
übersprungen ==========
------------------------------------------------------------------------ 
---
Was hab ich da falschgemacht???
Vielen Dank schon einmal im Voraus.
Grüße, Steffen

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da:
> rechner(alterstage)

sind nicht genug Argumente zwischen den Klammern um

> int rechner(int gebtag, int gebmonat, int gebjahr, int alterstage, int
> monat, int tag, int jahr, int differenztage) {

aufrufen zu können.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
case 1:
  gebtag=2,
  gebmonat=7,
  gebjahr=1993;
  printf("\nDiese Person ist %i Tage alt",rechner(alterstage));
  break;

Die Kommata nach den Zuweisungen gebtag=2, etc. passen wohl auch nicht!

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie muss ich das dann schreiben, damit genügend Argumente in den 
Klammern stehen???
Es soll ja ber so sein, dass später nur anstatt von dem %i die 
alterstage stehen.
Ich kann da ja nicht alle Sachen aufzählen, die ich oben initialisiert 
habe, oder???
Vielen Dank scjon einmal im Voraus,
Steffen

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
weiß keiner wie ich das Problem beheben kann???
Vielen Dank schon einmal im Voraus.
Grüße, Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen O. wrote:
> Hallo,
> weiß keiner wie ich das Problem beheben kann???
> Vielen Dank schon einmal im Voraus.
> Grüße, Steffen


Wenn du eine Funktion definierst, die Argumente benötigt,
dann musst du schon auch die Argumente beim Aufruf bedienen.
Die Funktion kann sich ja nicht einfach irgendwelche Werte
aus den Fingern saugen.

Das ist wie in einem Amt: Wenn auf dem Formular 5 Felder
einzutragen sind, dann musst du auch 5 Werte in die Felder
eintragen, ansonsten akzeptiert der Beamte das Formular nicht
und schmeist es dir zurück, damit du es vollständig ausfüllst.

Das ist deine Funktion

int rechner( int gebtag, int gebmonat, int gebjahr,
             int alterstage,
             int monat, int tag, int jahr, int differenztage )

Deine Funktion möchste von dir haben:
 * den Geburtstag, in Form von 3 Zahlenwerten, jeweils eine für
   Tag, Monat und Jar
 * Eine Angabe, die sich Alterstage nennt, keine Ahnung was das
   sein soll. Ist aber auch egal, die Funktion will sie haben
 * Ein weiteres Datum, wieder in Form von 3 Zahlen für Tag,
   Monat und Jahr
 * Und irgendwelche Differenztage.

Summa summarum, will die Funktion also beim Aufruf 8 Zahlen vom
Aufrufer wissen.

-> Daher kann ein Aufruf ala
 rechner(alterstage)

wohl nicht ganz richtig sein. Anstatt der geforderten 8 Werte,
wird nur einer übergeben.

PS: Mir ist schon klar, was du mit Alterstagen und Differenztagen
bezwecken willst. Diese Werte soll wahrscheinlich dir Funktion
berechnen. Das funktioniert aber so nicht.
Backe kleine Brötchen. Fang mit kleineren Funktionen an, die weniger
Argumente übernehmen. Wenn ich deinen Zeitplan so bedenke, dann
machst du im Moment den Über-Übernächsten Schritt vor dem Zweiten.
Lass dir mehr Zeit. In deinem Buch gibt es sicher auch genügend
Beispielaufgaben für einfachere Dinge.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast ne ganze Menge noch falsch gemacht. Die Rückgabe in C über die 
Argumentliste geht nur über Pointer. Schau dir das erst morgen oder 
übermorgen an. Bei Funktionen, die nur einen Wert berechnen, wird dies 
einfacherweise dem Funktionsrückgabewert zugewiesen, so wie in meiner 
Modifikation. (Deine Mathe dahinter hab ich nicht angeschaut).
int rechner(int gebtag, int gebmonat, int gebjahr,  int monat, int tag, int jahr) 
{
int alterstage, differenztage;
  gebjahr=gebjahr-1900;
  alterstage=gebjahr*365;
  alterstage=alterstage+gebmonat*30,5;
  alterstage=alterstage+gebtag;
  jahr=jahr-1900;
  differenztage=jahr*365;
  differenztage=differenztage+monat*30,5;
  differenztage=differenztage+tag;
    alterstage=differenztage-alterstage;
    
  return alterstage;
}
    
// Aufruf aus main() wäre dann

alterstage = rechner(gebtag, gebmonat, gebjahr, monat, tag, jahr);

printf ("\nDiese Person ist %i Tage alt",alterstage);
//oder direkt: 
printf("\nDiese Person ist %i Tage alt",rechner(gebtag, gebmonat, gebjahr, monat, tag, jahr));
Die Variable alterstag in der Funktion 'rechner' kann beliebig heißen, 
hat also nichts mit der Variablen in main() zu tun.
Und, 'differenztage' braucht man in main() nicht.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Vielen Dank für die Hilfe!!!
Ich habe das jetzt umgeändert, und siehe da: ES GEHT!!!!!
Das Programm läuft genauso, wie ich es mir vorgestellt hatte.
Grüße, Steffen

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich hab lediglich den Tip von Karl Heinz umgesetzt, und das 
hingeschrieben, was die Funktion von mir will. Nun geht es wunderbar, 
und die Angaben sind auch ziemlich genau. Wie ich das sehe, hab ich gar 
nichts mit einem Pointer gemacht.............
Grüße, Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen O. wrote:
> Hallo,
> Ich hab lediglich den Tip von Karl Heinz umgesetzt, und das
> hingeschrieben, was die Funktion von mir will. Nun geht es wunderbar,
> und die Angaben sind auch ziemlich genau. Wie ich das sehe, hab ich gar
> nichts mit einem Pointer gemacht.............

Das brauchst du auch nicht.
Allerdings solltest du dir das Konzept der 'lokalen Variablen'
in den nächsten Tagen ansehen. Es macht keinen Sinn jede Variable,
die in einer Funktion nur lokal benötigt wird, in die Argumentliste
mit aufzunehmen. Man kann und soll solche Variablen lokal in
der Funktion definieren.
int rechner( int gebtag, int gebmonat, int gebjahr,
             int monat, int tag, int jahr )
{
  int alterstage;
  int differenztage;

  gebjahr = gebjahr - 1900;
  alterstage = gebjahr * 365;
  alterstage = alterstage + gebmonat * 30.5;
  alterstage = alterstage + gebtag;

  jahr = jahr - 1900;
  differenztage = jahr * 365;
  differenztage = differenztage + monat * 30.5;
  differenztage = differenztage + tag;

  alterstage = differenztage - alterstage;

  return alterstage;
}

Noch was: Kommazahlen schreiben sich in praktisch allen Programmier-
sprachen mit einem . und nicht mit einem ,

Das hier
  differenztage = differenztage + monat * 30,5;
kompiliert zwar, macht aber etwas anderes als das hier
  differenztage = differenztage + monat * 30.5;

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hab lediglich den Tip von Karl Heinz umgesetzt, und das
>hingeschrieben, was die Funktion von mir will. Nun geht es wunderbar,
>und die Angaben sind auch ziemlich genau. Wie ich das sehe, hab ich gar
>nichts mit einem Pointer gemacht.............

Mich würde jetzt aber trotzdem interessiern, wie du den Wert 
'alterstage' ohne 'return alterstage' oder ohne Pointer zurückbekommen 
hast. Eines von beiden braucht man oder ich steh gerade auf dem Schlauch 
:-).
Karl Heinz hatte noch nichts vom 'return' erzählt ...
Deine (usprünglicher) Funktion mit dem Funktionsaufruf
int rechner( int gebtag, int gebmonat, int gebjahr,
             int alterstage,
             int monat, int tag, int jahr, int differenztage )

gibt so weder 'alterstage' noch 'differnztage' zurück - du kannst diese 
Werte nur in die Funktion übernehmen.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe dann nochmal in meinem Buch geschaut, und da stand dann drin, 
dass ich noch den return befehl einbauen muss.
Das mit den Kommas hab ich verbessert, vielen Dank für den Tip.
Grüße, Steffen

Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannst auch ein "void" vor das "main" schreiben.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rüdiger wrote:
> du kannst auch ein "void" vor das "main" schreiben.

Können tust du schon. Der Editor kann sich schliesslich nicht
wehren.
Richtig ist es dennoch nicht. main liefert einen int. Per Defintion
und immer.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
das Programm, und auch noch ein paar andere selber geschriebene laufen 
jetzt alle, und ich kann sie auch per Kommandozeile starten und so.....
Eins würde mich jetzt aber doch interressieren: Man kann bei Visual C++ 
am Anfang, wo man festlegt für was das Programm ist, auch Windows- 
Applikation einstellen. Wenn ich das mache, kommt am im Programmfenster 
ein schon geschriebener Code. Wenn ich da nun einen einfaches Hello 
World Programm drunterschreib, und es compilier (und linke), dann kommt 
auch ein normales Windows- Fenster, aber das Fenster ist weiss, d.h. es 
erscheint nicht der Hello World text.
Wie kann ich nun dort einen Text erscheinen lassen???
Brauch ich da irgendwelche C++ Befehle, oder was???
Vielen Dank schon einmal im Voraus.
Grüße, Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen O. wrote:

> am Anfang, wo man festlegt für was das Programm ist, auch Windows-
> Applikation einstellen. Wenn ich das mache, kommt am im Programmfenster
> ein schon geschriebener Code. Wenn ich da nun einen einfaches Hello
> World Programm drunterschreib, und es compilier (und linke), dann kommt
> auch ein normales Windows- Fenster, aber das Fenster ist weiss, d.h. es
> erscheint nicht der Hello World text.
> Wie kann ich nun dort einen Text erscheinen lassen???
> Brauch ich da irgendwelche C++ Befehle, oder was???

Jede Menge.

Beim VC6.0 Wizard gibt es die Möglichkeit, dass man sich eine
Windows Applikation erzeugen lassen kann, wobei der Wizard
eine 'Typical Hello World Application' erzeugen kann.
Dann klappts auch mit der Ausgabe.

Hinweis:
Die Ausgabe erfolgt in der Funktion WndProc und dort in
der switch-case Leiste unter WM_PAINT
    case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);
      // TODO: Add any drawing code here...
      RECT rt;
      GetClientRect(hWnd, &rt);
      DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
      EndPaint(hWnd, &ps);
      break;

Zuständig ist die Funktion DrawText

Aber ehrlich: Diese Art der Windows Programmierung, indem man
direkt auf das C-API zugreift, ist heutzutage nur noch was für
Masochisten.

Autor: prince_dizeko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include<stdio.h>

int main (void)
{
printf("Hello Wolrd\n");
getchar();
return(1);
}

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leichenschänder!

Autor: Termi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim T. schrieb:
> Leichenschänder!

was soll der Mist? (sorry)
Ich habe den Thread gerade komplett durchgelesen und genau nach so einer 
Antwort gesucht in C++ bin ich blutiger Anfänger, somit brauchte ich 
genau diesen Lückenfüller.

Ich weiß nicht was das immer soll, denken alle die dass ein Thread nur 
korrigiert werden darf solange dran geschrieben wird?
Über Google findet man alte Threads/ Foren besser als neue und wenn man 
dann einen Kommentar dazugeben kann was den Thread vervollständigt 
sollte man das machen!

solche Kommentare wie
Leichenschänder!
schrecken neue Mitglieder unter Umständen zurück, genau gesagt ist es 
eine Beleidigung. Es sei den ihr wollt keine neuen Mitglieder?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht nicht um "neue Mitglieder", es geht darum, daß die Unsitte, alte 
Threads zu kapern, hier sehr verbreitet ist.

Und nur zu oft hat derjenige, der einen alten Thread exhumiert, ein 
Problem, das nur seiner Vorstellung nach irgendwas mit dem Threadthema 
zu tun hat.

Und wenn ein Thread -- wie dieser hier -- im Grunde genommen *fünf 
Jahre* alt ist, dann kann man den ruhen lassen, und seine Frage in einem 
frischen, neuen Thread stellen.
Schlussendlich ist davon auszugehen, daß der "C++-Anfänger", der sich 
als nächster mit dem Thema beschäftigt, weder Visual Studio 6.0 
verwendet, noch die von ihm verwendete Version zu dieser 
bedienkompatibel ist und obendrein wahrscheintlich gar keine C++, 
sondern die Microsoft-Perversion namens "C++/CLI" gemeint ist.


Immerhin hast auch Du fast drei Jahre gebraucht, um Deine "Kritik" zu 
formulieren.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.