C++ Messagebox Fehler

Dark Soul

Lieutenant
Registriert
Juli 2007
Beiträge
561
Hi leutz!

Hab da ne Frage, und zwar kommt jedes mal wenn ich ne Messagebox machen will ein Fehler.

Code:

z.B
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Application->MessageBoxA("hi","ciao",0);
}

Beim Compilieren kommen da zwei Fehler:

error E2034: E2034 Konvertierung von 'const char *' nach 'const wchar_t *' nicht möglich
error E2342: E2342 Keine Übereinstimmung des Typs beim Parameter 'Text' ('const wchar_t *' erwartet, 'const char *' erhalten)

Habe gelesen das es etwas mit Unicode oder so zu tun hat. Verstehe aber nicht was ich da machen kann. mit _T und einbinden eines Headerfiles (weiss nicht mehr wie es hies) geht es nicht.

Hoffe könnt mir helfen!

Mfg

Dark Soul
 
verwende einfach statt MessageBoxA MessageBox und schreib ein L vor die "" würde dann so aussehen:
Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Application->MessageBox(L"hi",L"ciao",0);
}

ist zwar eigentlich das selbe wie mit _T aber villeicht funktionierts ja so.
Wenns nicht geht könntest du ja mal von Unicode auf Multi-Byte stellen und da mal testen.

Gruß
BlackMark
 
Genial! Danke es geht^^

Was bedeutet das L? Was ist genau Unicode? Was ist das _T?

Wäre cool wenn du mir dies alles eklären könntest, damit ich auch verstehe wieso ich das so schreiben muss :)

mfg
 
Ok also Unicode kannst du googlen da findest du genug was dir das gut erklärt.

Die Funktion MessageBoxA hat bei dir nicht funktioniert weil die nicht Unicode ist sondern Ansi ( ebenfalls googlen ).
Es gibt aber noch die Funktion MessageBoxW oder einfach nur MessageBox. Das W steht für wide und wird verwendet wenn Unicode an ist.
Wenn man einfach nur MessageBox schreibt sucht sich der Compiler selbst aus ob es A oder W sein soll.

Die Funktion MessageBox(W) will einen LPCWSTR ( = Long Pointer (to a) Constant Wide STRing ) und da alles was in "" steht nur ein C-String ist muss der durch das L noch zu einem LPCWSTR gecastet werden.

Das _T ist ähnlich mit dem L und castet den string in einen tchar array.
Dieser kann auch an die MessageBoxW funktion weiter gegeben werden.

Wenn jetzt aber zB nicht Unicode sondern Ansi an ist kann man an die MessageBox(A) Funktion auch einen normalen char array weiter geben.

Falls noch irgend was unklar ist einfach fragen!

Gruß
BlackMark
 
Danke für die Info :)

Hab da gerade noch ein Problem.

Ich möchte eine Leiste mit ner Tree-Darstellung haben. Also etwa so ähnlich wie im Windows Explorer mit den Ordnern. Jedoch weiss ich nicht wie ich dann im im Hauptfenster (in bsp. WinExplorer währe das dort wo die Ordner, Dateien angezeigt werden) ne änderung bekomme durch klicken auf nen anderen Ast.

mfg
 
Wenn du in der Tree-Darstellung irgend was machst sendet die normalerweise eine Message an das Hauptfenster.
Diese Message musst du dann irgend wie abfangen und dann verwalten.

zB.:
Wenn du mit der WinAPI programmierst fängt man Messages mit einer Switch-Case Konstruktion ab.

Ich weiß jetzt aber nicht mit was du Programmierst ( WinAPI, MFC, ... ) aber villeicht solltest du dir mal ein paar Tutorials über das programmieren mit Windows ansehen, dann wird dir sicherlich einiges klarer.

Gruß
BlackMark
 
Ich probiere ein Programm unter windows zum laufen zu bringen :D deshalb denke ich schon WinAPI. Verwende den C++ Builder 2009.

Ich kann in der Tree Darstellung nen Index einstellen. z.B Bildindex oder Auswahlindex. Weiss aber nicht wie ich auf diesen zugreifen kann im Hauptfenster...

mfg
 
Es wäre nicht schlecht wenn du dich zuerst ein bisschen darüber informierst wie in Windows Fenster aufgebaut sind und wie diese von Betriebsystem verwalted werden.
Am besten liest du dir ein paar WinAPI Tutorials durch um das zu verstehen.

Es fällt dir dann sicher leichter dein Problem zu lösen.

Und ein Fenster unter Windows muss nicht automatisch der WinAPI entspringen! ;)

Bei deinem Problem kann ich dir aber leider nicht weiter helfen, da ich noch nie etwas mit dem C++ Builder gemacht habe und mich deshalb dort nicht sonderlich gut auskenne.

Gruß
BlackMark
 
Zurück
Oben