TListBox

Übersicht
 

 

Die Klasse TListBox repräsentiert Listenfelder. In diesen kann der Benutzer eine bestimmte Auswahl treffen.

 

Die TListBox Teilhierarchie

 

Konstruktor zur direkten Erzeugung
Konstruktor zur Erzeugung aus einer Ressource
Standardattribute
Stilkonstanten
Beispielprogramm
Wichtige Elementfunktionen
Benachrichtigungsbotschaften

Konstruktor zur direkten Erzeugung

TListBox(TWindow* parent, int Id, int x, int y, int w, int h, TModule* module = 0);

Parameter Bedeutung
parent Übergeordnetes Fenster.
id Eindeutige ID des Kontrollelements.
x,y Position der oberen linken Ecke relativ zum Ursprung des Clientbereichs.
w Breite des Kontrollelements.
h Höhe des Kontrollelements.
module Zeiger auf die Modul- oder Anwendungsinstanz. Die Voreinstellung ist 0.

 

Standardattribute

Die Eigenschaften in Attr.Style werden um LBS_STANDARD erweitert.

Konstruktor zur Erzeugung aus einer Ressource

TListBox(TWindow* parent, int resourceId, TModule* module = 0);

Stilkonstanten

Siehe unter LBS_XXXX Stilkonstanten

Beispiel

Ausgabe des Beispielprogramms.

Downloaden der Dateien für das Beispielprogramm (23 KB).

 

Hier sehen Sie das Programmfenster des nachfolgenden Programms. Es enthält neben Objekten des Typs TListBox auch noch Kombinationsfenster (TComboBox) Objekte. Mehr zu Kombinationsfenstern finden Sie in der Beschreibung zur Klasse TComboBox.

In der SetupWindow()-Funktion von CListBoxClient werden einige Strings in die einzelnen Elemente übertragen. Beim Betätigen des Schalters Ende, werden die gewählten Einträge der einzelnen Elemente ermittelt und in einer MessageBox angezeigt (CListBoxClient::EndButton).

// Beispielprogramm: LISTBOX
// Datei: LSTBOX.H
 
 
#if !defined(__LSTBOX_H)
#define __LSTBOX_H
 
#include <owl\applicat.h>
#include <owl\framewin.h>
#include <owl\listbox.h>
#include <owl\combobox.h>
#include <owl\button.h>
 
#define ID_LISTBOX 100
#define ID_MSELLISTBOX 101
#define ID_SIMPLECOMBO 102
#define ID_DROPDOWNCOMBO 103
#define ID_DROPDOWNLIST 104
#define ID_ENDBUTTON 105
 
class CListboxApp : public TApplication
{

public:

CListboxApp() : TApplication() {}

 

protected:

void InitMainWindow();

 
};
 
class CListboxClient : public TWindow
{

TListBox* listBox;

TListBox* multiSelectLB;

TComboBox* simpleCombo;

TComboBox* dropDownCombo;

TComboBox* dropDownList;

TButton* endButton;

 

public:

CListboxClient(TWindow* parent=0, const char far* title=0, TModule* module=0);

 

protected:

void SetupWindow();

 

void EndButton();

 

DECLARE_RESPONSE_TABLE(CListboxClient);

 
};
 
#endif // __LSTBOX_H
 

 

// Beispielprogramm: LISTBOX
// Datei: LSTBOX.CPP
 
#include "lstbox.h"
 
DEFINE_RESPONSE_TABLE1(CListboxClient, TWindow)

EV_COMMAND(ID_ENDBUTTON, EndButton),

END_RESPONSE_TABLE;
 
CListboxClient::CListboxClient(TWindow* parent, const char far* title, TModule* module) :

TWindow(parent, title, module)

{

listBox = new TListBox(this, ID_LISTBOX, 20, 20, 150, 150);

multiSelectLB = new TListBox(this, ID_MSELLISTBOX, 180, 20, 150, 150);

simpleCombo = new TComboBox(this, ID_SIMPLECOMBO, 340, 20, 150, 150,

CBS_SIMPLE | CBS_NOINTEGRALHEIGHT, -1);

dropDownCombo = new TComboBox(this, ID_DROPDOWNCOMBO, 20, 200, 150, 150,

CBS_DROPDOWN, -1);

dropDownList = new TComboBox(this, ID_DROPDOWNLIST, 180, 200, 150, 100,

CBS_DROPDOWNLIST, -1);

endButton = new TButton(this, ID_ENDBUTTON, "Ende", 410, 200, 80, 30);

 

multiSelectLB->Attr.Style |= LBS_DISABLENOSCROLL | LBS_EXTENDEDSEL | LBS_MULTIPLESEL;

 

Attr.W = 500;

Attr.H = 250;

}
 
void CListboxClient::EndButton()
{

char *tmpStr = new char[50];

char *tmpStrPtr[10];

 

for(int x=0; x<10; x++) {

tmpStrPtr[x] = new char[50];

memset(tmpStrPtr[x], 0, 50);

}

 

ostrstream oStr;

 

listBox->GetSelString(tmpStr, 50);

multiSelectLB->GetSelStrings(tmpStrPtr, 10, 50);

 

oStr << "Listbox = " << tmpStr << endl << "Mehrfachauswahl-Listbox = ";

 

for(int x=0; x<multiSelectLB->GetSelCount(); x++)

oStr << tmpStrPtr[x] << " ";

 

simpleCombo->GetText(tmpStr, 50);

oStr << endl << "Simple Combobox = " << tmpStr;

oStr << endl << "DropDown Combobox = " << tmpStr;

 

dropDownList->GetText(tmpStr, 50);

oStr << endl << "DropDown List = " << tmpStr << ends;

 

int mBRes = MessageBox(oStr.str(), "Auswahl (OK=Programmende)",MB_OKCANCEL);

 

delete[] oStr.str();

 

for(int x=0; x<10; x++)

delete[] tmpStrPtr[x];

 

if(mBRes==IDOK)

CloseWindow();

}
 
void CListboxClient::SetupWindow()
{

TWindow::SetupWindow();

listBox->AddString("Kamel");

listBox->AddString("Tiger");

listBox->AddString("Löwe");

listBox->AddString("Elefant");

listBox->AddString("Maus");

listBox->AddString("Hund");

listBox->AddString("Katze");

listBox->AddString("Pferd");

listBox->AddString("Zebra");

listBox->AddString("Affe");

listBox->AddString("Kreuzotter");

listBox->AddString("Salamander");

listBox->AddString("Hase");

listBox->AddString("Schwein");

listBox->AddString("Laubfrosch");

listBox->AddString("Nachtfalter");

listBox->AddString("Bär");

listBox->SetSelIndex(3);

 

multiSelectLB->AddString("Fahrrad");

multiSelectLB->AddString("Automobil");

multiSelectLB->AddString("Flugzeug");

multiSelectLB->AddString("Schiff");

multiSelectLB->AddString("Motorrad");

multiSelectLB->AddString("Omnibus");

multiSelectLB->AddString("Lastkraftwagen");

 

int indexes[4] = { 0, 1, 3, 5 };

multiSelectLB->SetSelIndexes(indexes,sizeof indexes, true);

 

simpleCombo->AddString("Fernseher");

simpleCombo->AddString("Radio");

simpleCombo->AddString("Stereoanlage");

simpleCombo->AddString("Videorecorder");

simpleCombo->AddString("Tonbandgerät");

simpleCombo->SetSelIndex(0);

 

dropDownCombo->AddString("Angestellter");

dropDownCombo->AddString("Beamter");

dropDownCombo->AddString("Arbeiter");

dropDownCombo->AddString("freier Mitarbeiter");

dropDownCombo->SetSelIndex(0);

 

dropDownList->AddString("Kaffee");

dropDownList->AddString("Tee");

dropDownList->AddString("Milch");

dropDownList->AddString("Cappuchino");

dropDownList->AddString("Espresso");

dropDownList->AddString("Eiscafè");

dropDownList->SetSelIndex(0);

}
 
void CListboxApp::InitMainWindow()
{

SetMainWindow(new TFrameWindow(0, "Beispiel LISTBOX und COMBOBOX", new CListboxClient, true));

 

GetMainWindow()->EnableKBHandler();

}
 
int OwlMain(int , char*[])
{

CListboxApp app;

 

return app.Run();

}
 

 

Wichtige Elementfunktionen der Klasse TListBox

virtual int AddString(const char far* str);
Fügt der Listbox den String str zu und liefert dessen Position in der Liste zurück. Wird ein Wert kleiner 0 zurückgeliefert, ist ein Fehler aufgetreten.

virtual void ClearList();
Löscht alle Einträge in der Listbox.

virtual int DeleteString(int index);
Löscht den Eintrag an der Position index angegebenen Position. Der zurückgelieferte Wert enthält die Anzahl der restlichen Einträge. Mit einem Wert kleiner 0, wird ein Fehler signalisiert.

virtual int DirectoryList(uint attrs, const char far* fileSpec);
Diese Funktion ist besonders hilfreich, wenn man die Listbox Dateinamen anzeigen soll. Sie füllt die Listbox mit den über fileSpec festgelegten Einträgen die den in attrs angegebenen Attributen entsprechen.

int FindExactString(const char far* str, int searchIndex) const;
Durchsucht die Liste nach einer exakten Übereinstimmung mit dem in str angegebenen String. Die Suche beginnt bei dem in searchIndex angegebenen Eintrag. Die Liste wird komplett durchsucht. Wird bei der Suche nicht am Anfang der Liste begonnen und wird das Ende der Liste erreicht, wird die Suche am Anfang der Liste fortgesetzt. Wird für searchIndex der Wert -1 angegeben, wird vom Anfang der Liste aus gesucht. Ein zurückgegebener positiver Wert entspricht dem Index der Fundstelle. Bei einem Fehler entspricht der Rückgabewert der Windows-Konstante LB_ERR.

virtual int FindString(const char far* str, int Index) const;
Durchsucht die Listbox nach dem ersten Eintrag, der mit str beginnt. (Siehe FindExactString)

virtual int GetCount() const;
Liefert die Anzahl der Elemente in der Liste zurück oder LB_ERR, wenn ein Fehler aufgetreten ist.

virtual int GetSelIndex() const;
Liefert den Index des aktuell gewählten Elements zurück. Ist kein Element ausgewählt wird ein negativer Wert zurückgeliefert.

int GetSelIndexes(int* indexes, int maxCount) const;
Füllt das Array indexes mit den Indizes mit maxCount der ausgewählten Zeichenketten. Der Rückgabewert entspricht der Anzahl der in indexes enthaltenen Elemente zurück. Bei Listboxen mit einfacher Wahlmöglichkeit wird -1 zurückgegeben.

int GetSelString(char far* str, int maxChars) const;
Liefert den Text des aktuellen ausgewählten Eintrages in str. Dabei werden maximal maxChars Zeichen übertragen. Gibt für Listenfenster mit einfacher Wahlmöglichkeit die Länge der Zeichenkette zurück, einen negativen Wert beim Auftreten eines Fehlers (LB_ERR) oder 1, wenn keine Zeichenkette ausgewählt ist. Bei einer Listbox mit mehrfacher Wahlmöglichkeit wird -1 zurückgeliefert.

int GetSelStrings(char far** strs, int maxCount, int maxChars) const;
Liefert die Anzahl der gewählten Elemente einer Listbox mit mehrfacher Auswahlmöglichkeit und kopiert diese in den Puffer str, der maxCount Einträge mit maxChars Zeichen aufnehmen kann.

virtual int GetString(char far* str, int index) const;
Liefert den an index positionierten String in str zurück. Der zurückgelieferte Wert entspricht der Länge der Zeichenkette oder einem negativen Wert, wenn ein Fehler aufgetreten ist (LB_ERR).

virtual int GetStringLen(int Index) const;
Liefert die Länge der an index positionierten Strings zurück oder einen negativen Wert, wenn ein Fehler aufgetreten ist. (LB_ERR)

virtual int InsertString(const char far* str, int index);
Fügt den String str an der Position index der Listbox ein und liefert diese zurück oder einen negativen Wert, wenn ein Fehler aufgetreten ist. Wird für index -1 angegeben, wird der Eintrag am Ende der Liste angehängt.
WICHTIG: Die Liste wird nicht neu sortiert!

virtual int SetItemData(int index, uint32 itemData);
Setzt den 32-Bit-Wert des Listenfenster-Elements an der Position index.

int SetSel(int index, bool select);
Wählt das Element index in Abhängigkeit von select aus oder nicht. Ist select true, wird das Element ausgewählt, ansonsten nicht. Nur für Listeboxen mit Mehrfachauswahl.

virtual int SetSelIndex(int index);
Wählt das Element index und liefert diesen zurück. Bei einem Fehler wird ein negativer Wert zurückgegeben.

int SetSelIndexes(int* indexes, int numSelections, bool shouldSet);
Mit dieser Funktion können Einträge selektiert (shouldSet = true) oder deselektiert (shouldSet=false) werden. Die betreffenden Einträge sind im Array indexes enthalten Der zurückgelieferte Wert entspricht der Anzahl der selektierten bzw. deselektierten Einträge. Da diese Funktion nur für Listboxen mit Mehrfachauswahl geeignet ist, wird bei Listboxen mit Einfachauswahl -1 zurückgegeben.

int SetSelItemRange(bool select, int first, int last);
Selektiert/Deselektiert Elemente im Bereich first bis last. Ist select true, werden die Elemente selektiert, ist select false werden sie deselektiert. Der Rückgabewert entspricht der Anzahl der selektierten bzw. deselektierten Einträge. Bei einem Fehler wird ein negativer Wert zurückgegeben.

 

Benachrichtigungsbotschaften

Der Funktionsprototyp für die nachfolgenden Botschaftsmakros ist void Function();

EV_LBN_DBLCLK(id, Function)
Diese Benachrichtigungsbotschaft wird übergeben, wenn der Anwender einen Eintrag durch einen Doppelklick auswählt. Voraussetzung ist aber, daß die Listbox den Stil LBS_NOTIFY besitzt.

EV_LBN_ERRSPACE(id, Function)
Diese Benachrichtigungsbotschaft wird versendet, wenn die Listbox nicht genügend Speicher anfordern kann, weil nicht genügend Speicher mehr verfügbar ist.

EV_LBN_KILLFOCUS(id, Function)
Die Listbox hat den Fokus verloren.

EV_LBN_SELCANCEL(id, Function)
Die Botschaft wird gesendet, wenn der Anwender eine Selektion in der Listbox aufgehoben hat. Voraussetzung ist aber, daß die Listbox den Stil LBS_NOTIFY besitzt.

EV_LBN_SELCHANGE(id, Function)
Diese Botschaft wird übergeben, wenn der Anwender die Auswahl ändert. Voraussetzung ist aber, daß die Listbox den Stil LBS_NOTIFY besitzt. Diese Benachrichtigung wird aber nicht versendet, wenn eine Änderung mittels LB_SETCURSEL vorgenommen wird. Bei einer Listbox mit Mehrfachauswahl wird diese Botschaft ebenfalls gesendet, auch wenn der Anwender die Selektion nicht ändert.

EV_LBN_SETFOCUS(id, Function)
Wird gesendet, wenn die Listbox den Fokus erhält.

Übersicht    

Stand: 16.12.98 21:40:27
© 1998 by Hans Joachim Kiefer, hajokiefer@handshake.de