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

shade1990

Frischling

  • »shade1990« ist der Autor dieses Themas

Beiträge: 31

Beruf: Junior Developer

  • Private Nachricht senden

1

14.12.2016, 09:58

WinApi Edit Control Problem und QR-Code

Hallo Spieleporgrammierer-Forum,

ich bin mal wieder zu blöd, etwas ganz einfaches hin zu bekommen.
Ich habe ein Dialog erstellt (eine .dlg) und auf der befindet sich eine Edit_Control.
Der Benutzer soll jetzt den Dialog aufrufen und dann kann er dort in der Edit_Control einen Text eingeben.
Der Text soll dann, nachdem der Benutzer OK geklickt hat, in eine Variable geschrieben werden.

C-/C++-Quelltext

1
2
3
4
5
6
//Aufruf Dialog
show(HINSTANCE hinst, HWND hwnd)
{
    testhwnd = hwnd;
    DialogBox(hinst, MAKEINTRESOURCE(IDD_Data), hwnd, Data);
}

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
INT_PTR CALLBACK Data(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    int iLength = 20;

    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;
    case WM_COMMAND:
        if (LOWORD(wParam) == 1002)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        if (LOWORD(wParam) == ID_OK)
        {
            //testdlg = hDlg;
                        //Speich die Edit_control Eingabe und erzeuge einen QR-Code 
            generateQR(hDlg);       
        }
        break;
    case EM_GETLINE:
    break;
    }
    return (INT_PTR)FALSE;
}

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void generateQR(HWND hDlg)
{
    LPWSTR  wdaten = L"";

    //GetDlgItemTextW(hDlg, IDC_EDIT, wdaten, 20);
    GetDlgItemText(hDlg, IDC_EDIT, wdaten, 20);

    MessageBox(NULL, wdaten, L"Hallo", MB_OK);
}


Doch immer wenn ich OK klicke wird die Variable nicht befüllt und die Ausgabe per MessageBox ist LEER!
Kann mir jemand helfen? und es muss unbeding Win-API sein!

Meine Zweite Frage ist: Kennt einer eine einfach Methode einen QR-Code zu erzeugen bzw. gibt es eiinfache DLLs die Ihr empfehlen könnt?
»shade1990« hat folgendes Bild angehängt:
  • Dialog-dlg.png

2

14.12.2016, 17:21

Ja die WinApi ist ganz schön unübersichtlich...
Wenn ich mich nicht täusche dürfte HWND ein Pointer sein, wenn das nen Pointer ist müsstest du den als Referenz übergeben.

Lässt sich aber auch mit dem Debugger rausbekommen, einfach schauen auf welche Addrese er zeigt bevor du in die generateQR-Funktion Springst und dann nochmal schauen auf welcher Addrese der Zeiger innerhalb der Funktion-generateQR zeigt.

Frage 2 habe ich keine Ahnung, was es da so alles gibt.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

3

14.12.2016, 18:08

Dein wdaten-Zeiger zeigt auf einen Speicherbereich, der einen wchar_t groß ist, nämlich das Terminierende null-Zeichen. Noch dazu sollte der Compiler eine Warnung bezüglich des const werfen, welches bei der Konvertierung von const whar_t[1], der Typ deines Zeichenkettenliterals, zu wchar_t*, der Typ von wdaten, wegfällt. Das ist zwar nicht erlaubt, Compiler lassen das aber wegen Kompatibilität trotzdem zu.
Heißt also: Du brauchst einen besseren Puffer, in welchem du die Zeichen zwischenspeicherst.

shade1990

Frischling

  • »shade1990« ist der Autor dieses Themas

Beiträge: 31

Beruf: Junior Developer

  • Private Nachricht senden

4

15.12.2016, 10:37

Danke für die Antworten.
Habe es anderst geregelt, somit ist der Dialog überflüssig. :thumbsup:

Für QR-Code verwende ich die TBarCode SDK von Tec-IT. Wenn jemand eine bessere DLL/SDK kennt, dann einfach melden.

Werbeanzeige