Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

21.03.2006, 19:57

So, bin jetzt bei Listing 10.3 und habe wieder ein Problem. Und zwar beim Abfragen des Wertes einer Editbox:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
case ID_BTN_UEBERNEHMEN:
{
  LPWSTR szText = L"Hallo";

  GetWindowText (hEditBox, szText, 256);

  MessageBox (hWnd, szText, szText, MB_OK);

  return (0);
}


Das ist nicht das Original-Listing, hab es etwas verändert um den Ursprung des Fehlers festzustellen. Wenn ich das Programm ausführe, dann erscheint nicht wie geplant der Inhalt von szText, sonder "Hallo". Ich hab das Programm auch schon durch den Debugger laufen lassen, und bei der Ausführung von GetWindowText, bleibt der Inhalt von szText einfach bestehen und wird nicht überschrieben.

Ich hab jetzt schon einige Stunden durch die MSDN und Google gesucht, konnte aber keine Erklärung finden. Deshalb wär ich froh, wenn mir (mal wieder) jemand hilft.

Danke schonmal

__stdcall*

Treue Seele

Beiträge: 101

Wohnort: Dauchingen

Beruf: Schüler

  • Private Nachricht senden

12

21.03.2006, 20:33

Nabend,

mach es so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
// Buffer für String erzeugen

wchar_t* buffer = new wchar_t[256];

// Den Inhalt von der Box holen

// (wcslen gibt die länge des "Unicode-Strings" zurück

::GetWindowTextW(hEditBox, buffer , ::wcslen(buffer));

// Gibt den Inhalt der Box aus.

::MessageBoxW(NULL, buffer, buffer, MB_OK);

return 0;


Kleine Erläuterung zu dem "W" hinter den Funktionsnamen:

Das W steht für "wide" also Breit und zeigt damit an, das das eine Unicode-Funktion ist.

Die ANSI Funktionen haben statt dem 'W' ein 'A'.

Man sollte nur noch die Unicode-Funktionen benutzen und keine ANSI Funktionen mehr.

Seit WindowsNT wird intern nur noch auf Unicode aufgebaut.

Hoffentlich is das jetz klarer.
Und falls einer einen Fehler findet: Bitte sagen ;)

__stdcall*
[ICQ: 194-584-442 | MSN: nos4_9@hotmail.de | X-Fire: shadowstalker45]

13

21.03.2006, 20:36

höö?!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void ShowEditValue(::HWND__*, ::HWND__*, int iLine = 0);

void ShowEditValue(::HWND__* hEdit, ::HWND__* hMainWnd, int iLine)
{
    LPCTSTR lpszText;
    ::SendMessage(hEdit, EM_GETLINE, iLine, lpszText);
    ::MessageBox(hMainWnd, cText, cText, MB_OK | MB_ICONINFORMATION);
}


Soo.. kann sein das ich mich aus versehen mit den Parametern nen bissel vertan hab... sollte aber nicht das PRoblem sein die anzupassen ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

14

21.03.2006, 20:36

So funktioniert es auch nicht. Ich glaube beim Aufruf der Funktion wird automatisch überprüft ob ANSI oder UNICODE eingestellt ist. Deshalb macht es keinen Unterschied.

edit: Sorry, hab da was vergessen. Es funktioniert doch so, lag wohl nur an dem Datentyp der Variable. Sieht jetzt so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
case ID_BTN_UEBERNEHMEN:
{
  wchar_t* szText = new wchar_t[256]; 

  GetWindowText (hEditBox, szText, 256);

  MessageBox (hWnd, szText, szText, MB_OK);
 
  return (0);

}

15

22.03.2006, 18:14

Ts... guck mal als was LPCTSTR definiert ist ;) Und bei nem Edit Ctrl sollteste auch dessen Message benutzten ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Anonymous

unregistriert

16

22.03.2006, 18:37

Zitat von »"koschka"«

Im Normalfall muss man aber #define UNICODE
Unter älteren Versionen, wie im Tutorial beschrieben setzt Microsoft nur noch auf Unicode. Daher ist dieses #define überflüssig geworden, da es serienmäßig gesetzt wird.

17

22.03.2006, 19:17

Zitat von »"Devil"«

Ts... guck mal als was LPCTSTR definiert ist ;) Und bei nem Edit Ctrl sollteste auch dessen Message benutzten ;)


Das habe ich nach langen Recherchen auch rausgefunden. :)
Hat aber trotzdem irgendwie nicht funktioniert.

Und so wie ich es jetzt hab, funktioniert alles. Wieso sollte ich dann die Messages der EditBox benutzen? ???

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

22.03.2006, 22:59

@Patrick, ja das habe ich auch schon bemerkt... besonders einige "Newbies" immer den Konvertierungsfehler nach wchar_t bekommen und dann irritiert sind. Ich persöhnlich find das absolut korrekt bzw. schon längst überflüssig.

Werbeanzeige