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

storage

Treue Seele

  • »storage« ist der Autor dieses Themas

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

1

17.05.2009, 22:30

[Error]Label erstellen mittels WinApi

Servus,

ich probiere momentan ein Label in meinen Fenster zu erstellen, was eigentlich auch klappen sollte, den der Code stimmt.

C-/C++-Quelltext

1
2
hLabel = CreateWindow("STATIC", L"Label", WS_VISIBLE | WS_CHILD, 
        20, 20, 300, 20, hWnd, (HMENU)ID_LABEL, hInst, NULL);


hier der Fehler

Quellcode

1
2
1>c:\dokumente und einstellungen\storage\eigene dateien\visual studio 2008\projects\cppwin\cppwin\main.cpp(68) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [7]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.


Das ding ist, ich hatte den selben Fehler auch schon mal beim erstellen des Hauptfensters, nur da hat es geholfen mit L"Text" zu arbeiten, aber dort geht es nicht obwohl es das selbe Problem war.

ich hoffe ihr könnt mir da weiterhelfen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

17.05.2009, 23:12

Du musst natürlich auch vor "STATIC" ein L machen. Am besten vergisst du aber das L und verwendest das Text() Makro:

Text("STATIC")
Text("Label")

Denn dann funktioniert dein Code sowohl mit als auch ohne Unicode ;)

storage

Treue Seele

  • »storage« ist der Autor dieses Themas

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

3

17.05.2009, 23:21

Sehr schön danke.

Ich habe sowas ähnliches schon vermutet, aber net getestet.

Das komische ist unter Code::Blocks musste ich gar nix setzen da konnte ich ne normale Zeichenkette nehmen und er hat nicht gemeckert. ich hatte das nämlcih extra mal runtergeladen, weil manchmal auch einfach Visual Studio Probleme macht wo keine sind.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

17.05.2009, 23:30

Zitat von »"storage"«

Das komische ist unter Code::Blocks musste ich gar nix setzen da konnte ich ne normale Zeichenkette nehmen und er hat nicht gemeckert. ich hatte das nämlcih extra mal runtergeladen, weil manchmal auch einfach Visual Studio Probleme macht wo keine sind.


Nur weil du die Probleme nicht kennst bedeutet das nicht dass da keine sind ;)

Die neueren Visual Studio Versionen kompilieren per default mit UNICODE, Code::Blocks hingegen scheinbar nicht. Du kannst das unter Visual Studio natürlich auch abschalten (in den Projekteigenschaften "Character Set" auf "Not Set" stellen), dann wirst du auch dort keine "Probleme" mehr haben...

storage

Treue Seele

  • »storage« ist der Autor dieses Themas

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

5

18.05.2009, 00:17

Danke für die aufklärung.

habe ich dadurch irgendwelche Nachteile, wenn ich das ändere?
Ich hatte ebend schon wieder nen prob, deshalb habe ich es ausgeschaltet.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

18.05.2009, 00:42

Zitat von »"storage"«

habe ich dadurch irgendwelche Nachteile, wenn ich das ändere?


Naja erstmal nicht. Aber wenn du vorhast in deinem Programm mehrere Sprachen zu unterstützen solltest du deinen Code auf jeden Fall so schreiben dass er auch mit UNICODE funktioniert (bedeutet konsequentes verwenden von TEXT(), TCHAR, ...)

Es kann nie schaden es sich gleich von Anfang an richtig anzugewöhnen...

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

18.05.2009, 08:14

Zitat von »"dot"«

Zitat von »"storage"«

Das komische ist unter Code::Blocks musste ich gar nix setzen da konnte ich ne normale Zeichenkette nehmen und er hat nicht gemeckert. ich hatte das nämlcih extra mal runtergeladen, weil manchmal auch einfach Visual Studio Probleme macht wo keine sind.


Nur weil du die Probleme nicht kennst bedeutet das nicht dass da keine sind ;)

Die neueren Visual Studio Versionen kompilieren per default mit UNICODE, Code::Blocks hingegen scheinbar nicht. Du kannst das unter Visual Studio natürlich auch abschalten (in den Projekteigenschaften "Character Set" auf "Not Set" stellen), dann wirst du auch dort keine "Probleme" mehr haben...


Sicher ??? Weil oben hat er vor "Lable" nen "L" und da wird VC++ auch wieder rummeckern,
wenn man das mit "Not Set" compiled...
man muss sich in dieser Situation für eins entscheiden ;)
oder halt TEXT() nehmen ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

18.05.2009, 13:27

Zitat von »"Databyte"«

oder halt TEXT() nehmen ;)


Ja, natürlich nur wenn er TEXT() verwendet, darauf hab ich in meinem ersten Posting schon hingewiesen ;)

(allerdings hab ichs dort falsch geschrieben seh ich grad, sry :oops: )

storage

Treue Seele

  • »storage« ist der Autor dieses Themas

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

9

18.05.2009, 14:17

Ne ist net so schlimm, hatte ja bevor ich hier gepostet habe schon google gefragt und da kam das TEXT Makro auch vor, nur klappte es nicht bei mir.

Das lag halt daran das wenn ich es bei einem Parameter in der Funktion verwende auch auf alle anderen Parameter die eine Zeichenkette sind anwenden muss.

Ich habe ja gestern den Zeichsatz in VS ausgeschaltet, weil ich das Problem hatte das ich bei drücken auf meinen Button "Speichern" ein char Array anlege was als Buffer für die WinApi Funktion "GetWindowText" benötigt wird.

Damit habe ich mir den Text aus der Editbox geholt um ihn dann in einer Datei zu speichern. Nur gab mir der Compiler da halt wieder Fehler aus und das TEXT Makro scheint mit Variablen nicht zu funktionieren.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

18.05.2009, 14:45

Zitat von »"storage"«

[...] hatte ja bevor ich hier gepostet habe schon google gefragt [...]


sehr lobenswert :)

Zitat von »"storage"«

Ich habe ja gestern den Zeichsatz in VS ausgeschaltet, weil ich das Problem hatte das ich bei drücken auf meinen Button "Speichern" ein char Array anlege was als Buffer für die WinApi Funktion "GetWindowText" benötigt wird.


Klar. Unicode erwartet wchar_t und keine char Arrays. Wenn du hier beides unterstützen willst müsstest du den typ TCHAR anstatt von char verwenden. Der is je nachdem ob Unicode an oder aus is als wchar_t oder char definiert...

Zitat von »"storage"«

[...] und das TEXT Makro scheint mit Variablen nicht zu funktionieren.


Klar, das TEXT() Makro tut nix andres als je nachdem ob UNICODE an oder aus is ein L vorne hinzupacken. Das funktioniert natürlich nur mit Stringliteralen... :)

Werbeanzeige