Listboxen in Dialogen
-
Hm, also mal langsam. Du versuchst mit Code für einen Listview Einträge in einer Listbox zu machen.
Und ich habe da eine total revolutionäre Idee: Laß dir mal den letzten Fehler mit GetLastError() anzeigen.
-
Die Idee mit GetLasterror war gut die Fehlermeldung von GetDlgItem
heißt "Klasse nicht vorhanden" Da ich aber mit Winapi und C arbeite verstehe ich das nicht ganz.@Luckie Diese Listbox ist in Visual C/c++ 6.0 im Resourceneditor mit dem Eintrag ListenFeld erzeugt.
@flenders
Das Nichtfunktionieren sieht so aus, das das keine Eintragungen
nicht zu sehen ist.
-
Windows arbeitet intern mit Objekten. Das sieht zwar nicht so aus, wie die Objektorientierung, die Du kennst, aber schon Win 3.0 hatte intern eine Abart von Klassen. Brauchst Dich also nicht über den Fehler wundern. Das hat mit dem Windows-Kernel zu tun, nicht mit der Programmiersprache.
cYa
DjR
-
pad ? schrieb:
@Luckie Diese Listbox ist in Visual C/c++ 6.0 im Resourceneditor mit dem Eintrag ListenFeld erzeugt.
Also ich habe gerade nachgekuckt:
Listbox = Listenfeld
Listview = ListenelementOK und von was reden wir hier jetzt?
Blödsinn. Der Begriff Klasse hat in diesem Kontext eine ganz andere Bedeutung und hat nichts mit Objektorientierung zu tun. Es handelt sich um die Einordnung eines Elementes in eien Gruppe. So hat eine Schaltfläche die Fensterklasse BUTTON.
Und der Fehlermeldung nach zu schließen, hast du eine Listbox und keinen Listviwe. Du benutzt nähmlich Code um einen Listview zufüllen und diese Fensterklasse kann er nicht finden, da kein Listview existiert.
-
Danke für die Information.
Habe versuchsweise mit mit VC neues Projekt getstartet.
Das Projekt ist als Win32 Anwendung erzeugt.In diesem Projekt habe ich mit dem eingebauten Resourceneditor einen Dialog mit einem Listenfeld definiert, der Name wurde mit IDC_LIST1 vorgeschlagen und übernommen.
Ich versuche in der zugehörigen Dialogfunktion mit
case WM_INITDIALOG: { hCtl = GetDlgItem(hDlg, IDC_LIST1); ...
darauf zuzugreifen und bekomme mit GetLastError "Zugriff verweigert".
Der Dialog kommt dann hoch, aber die Listbox ist leer
obwohl ich in einer Schleife mitsprintf(szBuffer2,"%s", Jobs[i-1].item); item.pszText=szBuffer2; item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; item.state =LVIS_FOCUSED|LVIS_SELECTED; item.iSubItem = 0; ListView_InsertItem(hCtl,&item); ListView_SetItemText(hCtl,item.iItem,2,szBuffer2);
mehrere Items eintrage
Mit der oben aufgeführten Sequenz trage ich in
einem im Hauptfenster definierten Listview ohne Probleme Daten einhLstBox_01 = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "", WS_CHILD | WS_BORDER | WS_VISIBLE | WS_VSCROLL | LVS_REPORT | LVS_NOLABELWRAP | LVS_SINGLESEL | LVS_ICON | LVS_EDITLABELS, 1,1, (MainXsize-10),(MainYsize-50)/*400*/, hWnd,NULL,hInst,0);
Was mache ich falsch?
-
Lies noch mal, was ich gerade geschrieben habe. VC vergibt für ein Listenfeld (Listbox) und für ein Litenelement (Listview) die gleichen IDs, beides male IDC_LISTx.
-
Entschuldigung für die ungenaue Angabe
VC meldet Listenfeld Eigenschaften
Danke Luckie, die beiden Einträge haben sich überkreuzt.
Somit sollte es eine ListBox sein
Die Fehlermeldung von GetLasterror kommt aber bei
hCtl = GetDlgItem(hDlg, IDC_LIST1)
Falls es jetzt aber eine Listbox sein sollte,
wie fülle ich die aus einem Dialog in WM_INITDIALOG,oder anders gefragt wie bekomme ich hier eine mehrspaltige Box hin, ich würde hier gerne mit 2 Spalten arbeiten
oder noch anders gefragt wo gibt es Beispiele wie ich aus Dialogen oder aus einm Program heraus auf die in "Steuerelemente" definierten Punkte zugreifen kann ??
Für die interessanten habe ich noch keinerlei Anleitung gefunden, für die einfachen wie Editboxen u.ä. habe ichs ausprobiert.
-
Genau, wie mit einem normalen Fenster auch: LB_ADDSTRING mit SendDlgItemMessage. Alles weiteren im MSDN/PSDK was mit LB_ anfängt. Du kannst auch SendMessage nehmen, nur dann mußt du dir mit GetDlgItem das Handle vorher holen.
Und wenn du mehere Spalten willst dann nimm ein ListenElement (Listview). Wie man den füllt, weißt du ja schon.
Also hatte ich doch recht, dass du eien Listbox hast und keinen Listview.
-
Danke,
deine Antwort löst aber nicht mein primäres Problem.hCtl = GetDlgItem(hDlg, IDC_LIST1)
GetLastError "Zugriff verweigert".
und somit scheine ich keinen gültigen Handle auf die Listbox zu haben
Der Dialog ist im RC.File wie folgt definiert
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 274, 265 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,222,249,50,14 PUSHBUTTON "Abbrechen",IDCANCEL,2,249,50,14 LISTBOX IDC_LIST1,8,12,258,172,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP GROUPBOX "History",IDC_STATIC,2,2,270,188 END
-
Ich vergebe für Controlls immer nummerische Konstanten.
Versuch IDC_LIST1 mal in Anführungszeichen zu setzen. Oder benutz mal MAKEINTRESOURCE.
-
Danke funktioniert jetzt,
durch die Benutzung von LB_ADDSTRING
und einem manuellen entfernen aller Microsoft temporären Dateien ,inclusive
ohj´s und exe und einem folgenden neukompilieren geht es jetzt.