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

1

13.06.2008, 21:57

GetWindowText

Hallo Leute,
ich arbeite seit neuem mit Visual c++ 2008.
Jetzt habe ich folgendes Problem:

Code:

C-/C++-Quelltext

1
2
3
LPCWSTR Eins = L"";
GetWindowText (hEdit11, Eins , 256); // hEdit11 wurde vorher schon definiert

SetWindowText (hStaticW1, Eins);


Dann kommt beim Kompilieren folgender Fehler:

Quellcode

1
2
1>c:\visual studio 2008\projects\zauberquadrate - win32\zauberquadrate - win32\main.cpp(449) : error C2664: 'GetWindowTextW': Konvertierung des Parameters 2 von 'LPCWSTR' in 'LPWSTR' nicht möglich
1>        Durch die Konvertierung gehen Qualifizierer verloren


Ich habe das LPCWSTR Eins = L"" mal gegen LPWSTR Eins = L"" ausgetaucht, nun finder
der Compiler keinen Fehler mehr, aber das Programm funktioniert nicht
mehr richtig. Kann mir bitte jemand helfen?

MFG
void CreateComputerGame (int Quality);

Anonymous

unregistriert

2

13.06.2008, 22:24

1. Du erstellst einen LPWCSTR das C steht für const! Ergo kannst du den Wert gar nicht mehr ändern!
2. Eins ist nur 2 Elemente breit, gibst aber in GetWindowText 256 Elemente an, da stimmt was nicht.
3. Bist du durch LPWCSTR nicht mehr kompatibel zu ANSI, das W bedeutet Wide. Auch durch das L"" bist du nicht mehr Kompatibel - daher:

C-/C++-Quelltext

1
2
3
#include <tchar.h>
// [...]

::TCHAR* mein_string = _T ("Mein Text");


Zu deinem Code, besser so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
    // Speicher bereitstellen, +1 wegen der Null-Terminierung!!!

::TCHAR* buffer = new ::TCHAR [::GetWindowTextLength (hEdit11) + 1]; 
    // Text holen (+1 nicht mitzählen)

::GetWindowText (hEdit11, buffer, ::GetWindowTextLength (hEdit11));
    // Text setzen

::SetWindowText (hStaticW1, buffer);
    // Nach einer Party IMMER aufräumen

delete [] buffer;

Kein sinnloser Speicher statisch reserviert und alles ganz easy ;)

3

14.06.2008, 01:15

C-/C++-Quelltext

1
2
3
4
5
const std::size_t length(::GetWindowTextLength (hEdit11));
::TCHAR* buffer(new ::TCHAR [length + 1]());
::GetWindowText (hEdit11, length);
::SetWindowText (hStaticW1, buffer);
delete [] buffer; 
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

4

14.06.2008, 10:32

Also ich weiß jetzt nicht ob das so Ratsam ist einen Zeiger über einen Konstruktoraufruf zu Initialisieren, vorallem da es sich um einen build-in Datentyp handelt. size_t halte ich persönlich auch nichts von, da GetWindowTextLength nur einen INT wiedergibt und er ja nicht gerade Portabel zu anderen non-Windowssystemen coden will.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

15.06.2008, 14:20

Jetzt muss nur noch irgendeiner von euch 'buffer' bei GetWindowText reinschmuggeln und schon kann man die Beispiele verwenden ;)

Anonymous

unregistriert

6

15.06.2008, 14:26

hä?

edit: stimmt :D

Werbeanzeige