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

13.08.2009, 15:29

[WinAPI] listbox-string auslesen schlägt fehl

hallo,
bin noch relativ neu beim programmieren und hänge zur Zeit an einem Problem:
Ich habe eine ListBox erstellt und ein paar strings eingefügt
nun möchte ich bei doppelklick einen dieser strings (relative-DateiPfade) öffnen lassen. Klappte bisher ganz gut, doch neuerdings liest es nichts mehr aus, hier der Codeausschnitt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
int iIndex = SendMessage (hEditBox[4], LB_GETCURSEL,0,0), iLenght= SendMessage (hEditBox[4],LB_GETTEXTLEN,iIndex,0)+1;
TCHAR* pVarName;
pVarName =(TCHAR*) calloc (iLenght,sizeof (TCHAR));
SendMessage (hEditBox[4],LB_GETTEXT,iIndex,(LPARAM) pVarName);
MessageBox (hWnd,(LPCTSTR)pVarName,(LPCTSTR) "String",0);

ShellExecute(hWnd, "open",
                 pVarName,
                 NULL, NULL, SW_SHOWNORMAL);
delete pVarName;
return 0;


und die definition der Listbox (in WM_CREATE, statisches HWND in Callback):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
hEditBox[4]= CreateWindow ("listbox",
                                "Zeichnungen",
                                WS_VISIBLE | WS_CHILD| LBS_STANDARD ,
                                10,300,
                                250,20,
                                hWnd,
                                (HMENU)ID_LIST,
                                (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
                                NULL);

            SendMessage(hEditBox[4],LB_ADDSTRING,0,(LPARAM)(LPCTSTR)"..\\TDW85_t_realflow.pdf");
            SendMessage(hEditBox[4],LB_ADDSTRING,1,(LPARAM)(LPCTSTR) "..\\..\\test.doc");


Was mache ich falsch, das ich mein pVarName leer bleibt? Wie gesagt, hat bereits funktioniert.

€:ja der Name hEditBox passt nicht zur einer listbox aber ich hatte mich anfangs verplant beim erstellen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

13.08.2009, 15:39

Was genau bedeutet "liest nichts mehr aus"?

BTW:

C-/C++-Quelltext

1
(LPCTSTR) "String"


Damit solltest du sehr vorsichtig sein, das is nämlich falsch und gefährlich.
"String" wird immer ein nullterminiertes char array sein, wenn du das umcastest führt das nur zu undefiniertem Verhalten. Verwende besser das TEXT() Makro um deine Stringliterale herum und schmeiß diese ganzen casts weg:

C-/C++-Quelltext

1
TEXT("String")

3

13.08.2009, 16:08

liest nicht mehr aus bedeutet,dass (wie beim 1. post gesagt) pVarName leer bleibt, bzw. sich deswegen nur der jetzige Ordner öffnet
und noch danke für die Tipps

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

13.08.2009, 16:14

Zitat

(wie beim 1. post gesagt)


:oops: hab ich übersehen, sry

Und in iLenght bzw. iIndex stehen auch sinnvolle Werte drin!?

5

13.08.2009, 16:20

k sehe grade das bei iIndex der richtige Wert steht, bloß das iLenght 1 ist -> bei definition 0+1 war.

€:iIndex ist immer 0, gerade gesehen. Bin ratlos warum da immer 0 steht :doubt: ; habe jetzt mal in petzold nachgelesen, sollte nach dem buch eig. klappen.

€€: per GetLastError nun erfahren : Falsches Fensterhandle :oops: frag mich bloß warum... // habe jetzt einfach extra handle für ListBox gemacht und funktioniert jetzt -.-

Werbeanzeige