std::wstring in input box anzeigen

StehtimSchilf

Erfahrenes Mitglied
Hi forum, ich mal wieder.

Ich habe hier eine nette Klasse gefunden um mir eine dynamische Input-Box zu erstellen.

Ich möchte nun in meinem Programm die InputBox()-Fkt verwenden, doch das klappt nur begrenzt, da mir immer nur das 1. Zeichen des Strings angzeigt wird:

Code:
// das funktioniert nicht. Es wird nur 'W' angezeigt
std::wstring wstr = _T("Wie alt sind Sie?");
LPCTSTR prompt = (LPCTSTR) wstr.c_str();

// das funktioniert auch nicht
LPCTSTR prompt = _T("Wie alt sind Sie?"

// das funktioniert
LPCTSTR prompt = (LPCTSTR) "Wie alt sind Sie?"

// Hier noch der Funktionsaufruf
char buffer[256];
InputBox(phwndOwner, prompt, (LPCTSTR) "Ihre Eingabe()", (LPTSTR) buffer, 256);

Mein Problem ist jedoch, dass der Text, den ich in der Input-Box anzeigen möchte in einer std::wstring-Variable steckt und genau die kann ich nicht angeben.

Wie mach' ich das korrekt?

cheerioh & thx
SiS
 
Hi ComFreek

Das Problem ist nicht, dass ein Fehler auftritt, sondern, dass mir eben immer nur das erste Zeichen der String-Variable angezeigt wird.
 
Also ich würd's so probieren:
C++:
std::wstring wstr = L"Wie alt sind Sie?";

char buffer[256];
InputBox(phwndOwner, wstr.c_str(), (LPCTSTR) "Ihre Eingabe()", (LPTSTR) buffer, 256);
Gruß
MCoder
 
Eine Möglichkeit wäre es auch einfach Unicode als Projekcharset zu verwenden, da die geposteten Funktionen fast sauber programmiert wurden. Es wird überall LPTSTR oder LPCTSTR entsprechend dem aktuellen Charset verwendet.

Warum also std::wstring verwenden, aber Unicode nicht als Charset festlegen?
 
@Cromon: Das Projekt ist bereits auf Unicode gesetzt. Das Problem ist, dass die Variable die ich anzeigen möchte, aus einer Funktion kommt, welche eben std::wstring zurück liefert.

@MCoder: Wie in meinem 1. Post geschrieben, liefert Dein Ansatz eben genau nur den 1. Buchstaben 'W'.

@ComFreek: Auch LPCWSTR liefert mir nur das 1. Zeichen.

Es muss doch eine Möglichkeit geben, die std::wstring-Variable als LPCTSTR-Variable der erwähnten Funktion zu übergeben?

Danke für Eure Bemühungen!
cheerioh & Gruss
SiS
 
Also mit Unicodeprojekteinstellungen lässt sich der Code für die Inputbox nicht kompilieren, wegen dem kleinen Fehler, den ich oben schon angedeutet habe. Wenn du Unicode als Projekteinstellung hast, dann ist LPTSTR identisch mit wchar_t* und MultiByteToWideChar lässt sich nicht kompilieren, da beides Mal wchar_t* verwendet wird, aber das zweite Mal const char* erwartet wird.
 
Hi Cromon

diese Anmerkung wollte ich noch editieren:

Ich habe natürlich beim Call der MultiByteToWideChar()-Fkt in CreateDlgControl() gecastet:

wcharlength = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)caption, -1, lpwsz, 0);

Lasse ich den Cast weg, wie im Original-Code, dann gibt es, wie Du richtig sagst, einen C2664-Fehler! Kannst Du mir konkret sagen, was ich ändern soll?
unicode char set und std::wstring als Input ist vorgegeben und die InputBox()-Fkt möchte ich verwenden (kann ich natürlich entsprechend anpassen).

Gruz
SiS
 
Du darfst Unicode und Nicht-Unicode nicht einfach hin- und hercasten! Grundsätzlich ist Casten um Fehler wegzubringen immer komplett falsch. Das ist auch der Grund warum du nur einen Buchstaben siehst. Ein Buchstabe, der auch im normalen ANSI-Format bis 255 in 1 Byte darstellbar ist, der hat als zweites Byte im Unicodeformat eine 0.
 
Zurück