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

19.04.2007, 17:49

SendMessage()- double in EDIT-Box schreiben

Hallo

ich bräuchte schnell Hilfe bei einem Problem:

Möchte an den Text in einer EDIT-BOX eine Zahl anhängen die vom typ double ist.

Bei Text also "char" habe ich es wie folgt gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
char text = "blubb";

int len = GetWindowTextLength(hEdit);

SendMessage(hEdit,EM_SETSEL,(LPARAM)len,(WPARAM)len);
                SendMessage(hEdit,EM_REPLACESEL,(LPARAM)FALSE,(WPARAM) text);


nun möchte ich folgendes realisieren:

C-/C++-Quelltext

1
2
3
4
5
double zahl = 1.0;
int len = GetWindowTextLength(hEdit);

SendMessage(hEdit,EM_SETSEL,(LPARAM)len,(WPARAM)len);
                SendMessage(hEdit,EM_REPLACESEL,(LPARAM)FALSE,(WPARAM) zahl);


Allerdings stürzt das Programm ab und ich bekomme im Debugg-Modus einen Fehler: "Zugriffsverletzung beim Lesen an Position XXXXXXX"

Ich weiß nur das es definitiv an Funktion oben liegt.

Wenn ich die Zahl von double in char casten will funktioniert es immer noch nicht.

Ich hoffe ihr könnt mir helfen.

Wäre euch sehr verbunden ;)

Gruß
SaRu_

PS: Laut C++ für Spieleprogrammierer behandelt man double wie float und fügt an die Zahl ein "d" an. (double zahl = 1.0d;) Allerdings spuckt VC++ 2005 eine Fehlermeldung dabei aus. Mach ich was falsch?

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

19.04.2007, 18:12

Probier mal sprintf ;) Ich geb dir einfach mal zwei Links, die sollten eigentlich reichen. Der erste behandelt die grundlegende Anwendung, der zweite zeigt dir wie du deine double umgewandelt kriegst.

http://www.cppreference.com/stdio/sprintf.html
http://www.ampl.com/NEW/printf.html

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

19.04.2007, 21:35

Zitat von »"msdn"«


lparam
A pointer to a null-terminated string containing the replacement text.


Was sagt uns das nun?? Zuerst mal einen String erzeugen, genau! :) Das tust du über alte C Versionen (sprintf, ...) oder im modernen C++ (lexical_cast, stringstream, ...).

Siehe auch hier: https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=7437

grüße
@D13_Dreinig

eugler

Frischling

Beiträge: 26

Beruf: Student

  • Private Nachricht senden

4

27.10.2007, 15:49

also ich habs versucht so zu realisieren, aber leider klappt es nicht, es wird nichts angezeigt... habt ihr eine idee?

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
int EditBoxSup1_1_Val = 100;

[...]

switch(uMsg)
    {

    case WM_INITDIALOG:

        char boxfill[100];
        sprintf(boxfill, "%d", EditBoxSup1_1_Val);
        
        int len;
        len = SendMessage(hEditBoxSup1_1, WM_GETTEXTLENGTH, 0, 0);
        SendMessage(hEditBoxSup1_1, EM_SETSEL, len, len);
        SendMessage(hEditBoxSup1_1, EM_REPLACESEL, FALSE, (LPARAM)boxfill);

    
        return TRUE;

    case WM_COMMAND:
        switch(LOWORD (wParam))
        {
        case IDC_EDIT1:

            char Text1[256];
            hEditBoxSup1_1 = (HWND)lParam;
            GetWindowText (hEditBoxSup1_1, Text1, 256);
            EditBoxSup1_1_Val = atoi(Text1);  

        return (0);

Werbeanzeige