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

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

11

09.06.2015, 21:38

Naja, also Grundlagen fehlen mir eigentlich nicht. Ich habe nur sehr wenig Erfahrung bei Windows-Fenstern. In der Konsole habe ich auch schon viel mit strings gearbeitet, aber in einem Windows-Fenster ist fast alles noch "fremd".

Irgendwie klapp's noch nicht so ganz:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
string frage;

// ...

frage = "Was ergibt 1+1?";

// ...

char* cFrage = frage.c_str();


So, jetzt kommt die Fehlermeldung: error C2440: 'Initialisierung': 'const char *' kann nicht in 'char *' konvertiert werden

12

09.06.2015, 21:40

Du liest deine Compilerfehler aber schon?
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

13

09.06.2015, 21:43

Naja, also Grundlagen fehlen mir eigentlich nicht. Ich habe nur sehr wenig Erfahrung bei Windows-Fenstern. In der Konsole habe ich auch schon viel mit strings gearbeitet, aber in einem Windows-Fenster ist fast alles noch "fremd".

Irgendwie klapp's noch nicht so ganz:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
string frage;

// ...

frage = "Was ergibt 1+1?";

// ...

char* cFrage = frage.c_str();


So, jetzt kommt die Fehlermeldung: error C2440: 'Initialisierung': 'const char *' kann nicht in 'char *' konvertiert werden



Tut mir leid. Habe hier das "const" vor "char*" vergessen.
Du sollst aber frage.c_str() auch CreateWindow als Parameter übergeben.

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

14

09.06.2015, 21:51

Nein, das geht leider nicht. Nun gibt er aber nur das erste Wort als Frage aus (also "Was"). Ich hab es auch schon probiert bei den strings, vor die ' " ' eine Klammer zu setzten, aber ohne Erfolg.
Hier nochmla die Ganze Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    // lokale Variablen
    HWND hFrageText;
    HWND hFrage;

    TCHAR szFrage [256];

    string frage;

    // Zufallszahl errechnen
    ErrechneZufallszahl ();

    // Verzweigen, je nach Zufalsszahl
    switch (iZufallszahl)
    {
        // Zufallszahl = 1?
        case (1):
            {
                frage = ("Was ergibt 1+1?");
            } break;

        // Fasche Zahl?
        default:
            {
                frage = ("Was ergibt 2+2?");
            }
            

    } // switch

    const char* cFrage = frage.c_str();

    std::basic_stringstream<TCHAR> Stream;
    Stream << frage.c_str();
    Stream >> szFrage;

    // Alles ausgeben
    //

    // "Frage:" (Als Text)
    hFrageText = CreateWindow (TEXT("STATIC"),
        TEXT("Frage:"),
        WS_VISIBLE | WS_CHILD,
        10, 150,
        50, 20,
        hWnd,
        (HMENU)ID_STATICTEXT,
        hInst,
        NULL);

    // Die Frage selber ausgeben
    hFrage =  CreateWindow (TEXT("STATIC"),
        szFrage,
        WS_VISIBLE | WS_CHILD,
        75, 150,
        130, 20,
        hWnd,
        (HMENU)ID_STATICTEXT,
        hInst,
        NULL);

15

09.06.2015, 21:54

ich gebs auf...

:dash: :dash: :dash:

lies bitte alle vorrangegangenen posts aufmerksam durch.

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

17

10.06.2015, 16:17

Hallo,
ich habe alles nochmal in Ruhe druchgelesen, aber ich bin trotzdem zu keiner Lösung gekommen. Ich kann auch nicht "sFrage.c_str()" als Parameter in "CreateWindow" verwenden. Hier nochmal die ganze Funktion (Habe mal das auskommentiert, was irrelevant ist):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    // lokale Variablen
    HWND hFrageText;
    HWND hFrage;

    TCHAR szFrage [256];

    string sFrage;

    //char chFrage;

    // Zufallszahl errechnen
    // ErrechneZufallszahl ();

    // Verzweigen, je nach Zufalsszahl
    /*switch (iZufallszahl)
    {
        // Zufallszahl = 1?
        case (1):
            {
                sFrage = "Was ergibt 1+1?";
            } break;

        // Fasche Zahl?
        default:
            {
                sFrage = "Was ergibt 2+2";
            }
            

    } // switch*/

    sFrage = ("Alles geht!");

    const char* chFrage = sFrage.c_str ();

    std::basic_stringstream<TCHAR> Stream;
    Stream << chFrage;
    Stream >> szFrage;

    // Alles ausgeben
    //

    // "Frage:" (Als Text)
    hFrageText = CreateWindow (TEXT("STATIC"),
        TEXT("Frage:"),
        WS_VISIBLE | WS_CHILD,
        10, 150,
        50, 20,
        hWnd,
        (HMENU)ID_STATICTEXT,
        hInst,
        NULL);

    // Die Frage selber ausgeben
    hFrage =  CreateWindow (TEXT("STATIC"),
        szFrage,
        WS_VISIBLE | WS_CHILD,
        75, 150,
        130, 20,
        hWnd,
        (HMENU)ID_STATICTEXT,
        hInst,
        NULL);

Ich bekomme auch keine Fehlermeldung vom Compiler, trotzdem wird immer nur das erste Wort vom string angezeigt. :dash: Ich bin halt zu blöd... Was habe ich nun wieder falsch gemacht? Danke, dass ihr neure Nerven für micht lasst...

18

10.06.2015, 16:46

Gerade mal selbst ausprobiert.

Nimm einen std::wstring. Um diesem Werte zuzuweisen, musst du ein "L" vor die Zeichenkette stellen.
So z.B.

C-/C++-Quelltext

1
std::wstring test = L"Wie heißt du?";


Diesen wstring kannst du dann auch als Parameter nutzen, indem du die Methode "c_str()" aufrufst.
Hoffe das hilft dir jetzt.

mfg

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

19

10.06.2015, 16:53

DANKE!!! Endlich klappt alles!!! :) :thumbsup:
Nur jetzt habe ich (auch schon vorher), dass er anscheinend falsch verzweigt (in der Call-Back Funktion). Also er gibt sofort die Texte aus, ohne, dass ich vorher einen Button gedrückt habe...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// ...

                // Wurde "Kategorie" angeklickt?
                case ID_BTN_KATEGORIE:
                {
                    ErstelleKategorieButtons (hWnd, hInst);

                    // Wurde "Mathe" angeklickt?
                    case ID_BTN_MATHE_KATEGORIE:
                        {
                            Mathe (hWnd, hInst);
                        } break;

                    // Wurde "Biologie" angeklickt?
                    case ID_BTN_BIO_KATEGORIE:
                        {
                            // Fkt. zu Bio
                        }

                    // Wurde "Geschichte" angeklickt?
                    case ID_BTN_GESCHICHTE_KATEGORIE:
                        {
                            // Fkt. zu Geschichte
                        }

                } // Kategorie

// ...


Das selbe passiert auch, wenn ich "ErstelleKategoreiButtons(hWnd, hInst)" auskommentiere. Was ist schonwieder der Fehler?

20

10.06.2015, 17:41

Warum hast du in einem case-block noch einen case ohne switch?

Werbeanzeige