C++ Frage: MessageBox mit Benutzernamen funktioniert nicht!!
-
Hallo,

ich versuche in einer console application meinen Namen in einer MessageBox darzustellen.
Zuert wird man dazu aufgefordert, seinen Namen einzugeben, dann soll der in einer MessageBox erscheinen:
bei diesem Code:MessageBox(NULL, "Hallo " <<nName << " " , "Name", MB_OK);kommt folgende Fehlermeldung:
...\main.cpp|19|error: invalid operands of types 'const char [20]' and 'int' to binary 'operator<<'| ||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|Was kann ich dagegen tun?
Außerdem wollte ich wissen, ob ich die Position auf den Desktop bestimmen kann, wenn ja wie?
Und wie kann ich die Maus mit einem Programm bewegen, also dasss die so hin- und herspringt?
Danke schonman jetzt für die Antworten!
DerBoss
-
Vorher ein string-Objekt anlegen, deine Stringkonstanten und Variablen dort hineinshiften und anschließend c_str() benutzen.
Oder mit strcpy(), strcat(), sprintf(), MFC CString, usw. arbeiten. Es gibt viele Möglichkeiten, das hinzubekommen.
-
Ich glaube du solltest erstmal die Grundlagen lernen...
-
Z schrieb:
Vorher ein string-Objekt anlegen, deine Stringkonstanten und Variablen dort hineinshiften
Du meinst stringstream?
-
Musst dir nen stringstream erstellen wenn du die Shift-Syntax willst:
stringstream msg; msg << "Hallo " << nName; MessageBoxA(NULL, msg.str().c_str() , "Name", MB_OK);Obwohl du in diesem Fall keinen Stream brauchst, Strings zusammenketten kann std::string selbst ... aber sobald andere Typen ins Spiel kommen wird der Stream interessant.
OkayBoss schrieb:
Ich glaube du solltest erstmal die Grundlagen lernen...
Oder auf D wechseln. Da kann man soetwas machen.
(Fuck, ist D schön. kA warum ich mich freiwillig mit C++ herumschlage
)
-
manni66 schrieb:
Z schrieb:
Vorher ein string-Objekt anlegen, deine Stringkonstanten und Variablen dort hineinshiften
Du meinst stringstream?
Nö, aber das geht natürlich auch. Man nehme halt das, was am besten passt.
-
@Ethon also wenn ich Ihre Lösung kopiere und string include,
kommt da:...|20|error: aggregate 'std::stringstream msg' has incomplete type and cannot be defined| ||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|also ist es mit C++ nicht möglich MessageBoxes mit Benutzernamen zu erstellen und diese an %random%-platzierten Stellen auf den Bildschirm auftauchen zu lasse??
@Z ich dachte immer sprintf() wäre ein C-Befehl und die wollte ich vermeiden...
@OkayBoss sorry ich wollte nur ein programm erstellen mit einer msg-box und benutzerdefinierten namen...wusste ja nicht, dass das ein profi-projekt ist
@Ethon2.0 ich wollte eigtl gerne bei C++ bleiben und nicht wechseln
würde es helfen, wenn ich den ganzen code poste?
-
std::stringstreamwird im Headersstreamdeklariert.
-
DerBoss schrieb:
@Z ich dachte immer sprintf() wäre ein C-Befehl und die wollte ich vermeiden...
Das ist das Schöne an C++: die C-stdlib kann auch benutzt werden. Muss ja auch sein, da unglaublich viel fertiger C-Code existiert, wovon man einiges vielleicht auch mal unter C++ benutzen möchte.
-
ok, danke jetzt klappts....
nun stellt sich nur noch die frage, ob ich das an %random%-positionen platzieren kann...
danke schonmal jetzt für die hilfe bei der sache...:)
-
DerBoss schrieb:
ok, danke jetzt klappts....
nun stellt sich nur noch die frage, ob ich das an %random%-positionen platzieren kann...
danke schonmal jetzt für die hilfe bei der sache...:)Du kannst Strings beliebig manipulieren, da sind deiner Phantasie keine Grenzen gesetzt, sofern du es programmieren kannst. Leider ist mir nicht klar, was du dir wünscht, daher kann ich dir keinen konkreten Code zu deiner Frage liefern.
-
okay, ich möchte das das Dialogfenster nicht immer an der gleichen position auftaucht sondern an einer von computer generierten immer unterschiedlichen position erscheint.
is das immer noch unklar, wiel genauer kann ich es jetzt auch nicht formulieren...?
-
Da das MessageBox-Fenster per default in der Mitte des Bildschirms angezeigt wird und man wenig Einfluss darauf nehmen kann, sehe ich da nur zwei Möglichkeiten: entweder erstellst du ein Fenster mit CreateWindow, DialogParameter oder DialogBox oder Ähnliches und generierst die Position bei jedem Aufruf zufällig, oder - wenn du darauf bestehst, MessageBox zu verwenden - du schreibst einen Hook, was mehr Wissen erfordert.
-
[Rewind] schrieb:
Da das MessageBox-Fenster per default in der Mitte des Bildschirms angezeigt wird und man wenig Einfluss darauf nehmen kann, sehe ich da nur zwei Möglichkeiten: entweder erstellst du ein Fenster mit CreateWindow, DialogParameter oder DialogBox oder Ähnliches und generierst die Position bei jedem Aufruf zufällig, oder - wenn du darauf bestehst, MessageBox zu verwenden - du schreibst einen Hook, was mehr Wissen erfordert.
Es gibt auch den Trick, das HWND der MsgBox zu finden und sie dann mittels Winapi neu zu positionieren. Dazu müsste Google einiges ausspucken.
-
okey, da das mir doch zu kompliziert ist, belasse ich es dabei
vielen danke für eure hilfe!