combobox auslesen klappt nicht (Win32)



  • Hallo, ich versuche eine Comboxbox auszulesen, aber irgendwie bekomme ich keine korrekten Daten.
    Erstellen:

    HWND hWndCombo = CreateWindow("COMBOBOX", "ComPort:", WS_CHILD |  CBS_DROPDOWNLIST | WS_VISIBLE , 100, offsetY+10, 80, 91, hWnd, (HMENU)LST_PORT, hInstance, NULL);
    

    Wenn ich nun versuche mittels

    int controlTextLen = GetWindowTextLength(hWndCombo);
    char controlText[1024];
    GetWindowText(hWndCombo, (char *)controlText, controlTextLen);
    

    den aktuelle (Text-) Wert auszulesen, bekomme ich falsche Werte (Ascii-Zeichen).

    Und mittels

    int index = SendMessage(hWndCombo, CB_GETCURSEL, 0, 0);
    

    bekomme ich immer die 0 als Ergebnis.

    der "AusleseCode" ist in der CallBack-Routine (unter WM_COMMAND)

    hat jemand eine idee?



  • Tachyon76 schrieb:

    bekomme ich falsche Werte (Ascii-Zeichen).

    Kann es sein, dass dein Projekt auf Unicode eingestellt ist? Dann z.B. wchar_t statt char nehmen. Und sieh dir mal TCHAR an!



  • ich denke nicht dass unicode genutzt wird. weiss leider nicht wie ich das einstelle, da ich das programm mit MinGW compiliere (gcc).
    Hab ein kleines testprogramm unter VS erstellt, da bekomme ich korrekte werte. (Multi Byte CHaracter Set)
    Wenn ich auf Unicode umstelle, bekomme ich das erst gar nicht compiliert (cannot convert const char* to LPCWSTR.

    Deswegen denke ich dass nicht unicode eingestellt ist, da der gcc compiler doch eher wegen ungültigen datentypen meckert.

    edit:
    ausserdem werden die korrekten werte der combobox gesetzt und eine textBox lese ich auch erfolgreich mittels GetWindowText() aus.



  • du kannnst ne comcobox ned mit GetWindowText auslesen denn. dafür gibts ne extra windoof message für SendM3ssage wo du den index mitangeben musst.



  • aber
    int index = SendMessage(hWndCombo, CB_GETCURSEL, 0,0);
    funktioniert auch nicht (gibt immer 0 zurück). hab den Text auch schon mittels Message versucht auszulesen(nicht fuinktioniert)



  • is ja auch nur ein string drin oder haste auch noch CB_ADDSTRING oder wie das teil heisst und die box bevölkert?



  • ja, ich habe mehrere einträge mittels CB_ADDSTRING hinzugefügt
    z.b.
    SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) "COM1");



  • hast du die InitCommonControlsEx gesetzt?



  • ok, hab den fehler.
    ich habe für den SendMessage / CB_GETCURSEL aufruf das Handle genutzt dass ich beim erstellen der Dropdown erhalten habe.
    Wenn ich aber das handle mittels GetDlgItem wieder ermittel, funktioniert es



  • Tachyon76 schrieb:

    ich habe für den SendMessage / CB_GETCURSEL aufruf das Handle genutzt dass ich beim erstellen der Dropdown erhalten habe

    dann läuft da bei dir aber was verkehrt, denn das Handle was du via Create oder CreateEx erhälst ist das gleiche wie du mit GetDlgItem() erhälst.



  • wahrscheinlich variable als lokal auto in wndproc deklariert 🕶


Anmelden zum Antworten