TListBox (OWL)

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

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

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.

TRadioButton (OWL)

Die Klasse TRadioButton repräsentiert Schaltfelder und ist von TCheckBox abgeleitet. Normalerweise werden mehrere (oder mindestens 2) Schaltfelder in einer Gruppe (TGroupBox) zusammengefaßt. Dadurch kann der Anwender dann nur jeweils ein Schaltfeld der Gruppe auswählen. Die Markierung eines Schaltfeldes schließt alle anderen zur Gruppe gehörenden Schaltfelder aus.

Konstruktor zur direkten Erzeugung

TRadioButton(TWindow* parent, int id, const char far* title, int x, int y, int w, int h, TGroupBox *group = 0, TModule* module = 0);

Parameter Bedeutung
parent Zeiger auf übergeordnetes Fenster.
id Dialogelement ID
title Der dem Schalter Auswahlschalter zugewiesene Text.
x,y Position der oberen linken Ecke relativ zum Ursprung des Clientbereichs.
w Breite
h Höhe
group Zeiger auf eine assoziierte Gruppe. In der Voreinstellung wird 0 verwendet, was bedeutet, daß das Kontrollelement keiner Gruppe zugeordnet wurde.
module Zeiger auf die Modul- oder Anwendungsinstanz. Die Voreinstellung ist 0.
Konstruktor zur Erzeugung aus einer Ressource

TRadioButton(TWindow* parent,int resourceId, TGroupBox *group, TModule* module = 0);

Standardattribute

Attr.Style verwendet die folgenden Stile: WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON.

TListWindow (OWL)

Die Klasse TListWindow kapselt das Listenansicht Steuerelement von Windows 95 (WC_LISTVIEW). Da die OWL bereits eine Klasse TListView (Views für Listenfenster) enthält, wurde die Klasse TListWindow genannt, um Probleme mit bereits bestehendem Programmcode zu vermeiden. Ein TListWindow erzeugt eine äußerst flexible Listenansicht, die aus einem Symbol und einer Beschreibung bestehen und auf unterschiedliche Weise dargestellt werden kann. Der Explorer von Windows 95 benutzt beispielsweise im rechten Fensterabschnitt ein solches Kontrollelement.

TListWindow Teilhierarchie

Konstruktor zur direkten Erzeugung

TListWindow(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 im Clientbereich des übergeordneten Fensters.
w Breite des Kontrollelements.
h Höhe des Kontrollelements.
module Zeiger auf die Modul- oder Anwendungsinstanz. Die Voreinstellung ist 0.
Konstruktor zur Erzeugung aus einer Ressource

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

Wichtige Elementfunktionen der Klasse TListWindow

Es folgt nun eine Auflistung von Elementfunktionen der Klasse TListWindow. Diese fällt etwas ausführlicher aus, da die Online-Hilfe der ObjectWindows Bibliothek nur sehr spärliche und teilweise fehlerhafte Informationen enthält. Es sei an dieser Stelle nochmals angemerkt, daß diese Klasse aufgrund ihrer Flexibilität auch entsprechende Komplexität in sich birgt. Es bedarf schon einiger Experimente um die Funktionsweise verstehen zu lernen. Sie sollten dabei so vorgehen, daß Sie zuerst einfache Operationen anwenden und sich erst zu einem späteren Zeitpunkt mit den spezielleren Eigenschaften beschäftigen. Weiterhin stehen eine Vielzahl von Klassen und Aufzählunstypen im Zusammenhang mit TListWindow zur Verfügung wie beispielsweise TLwFindInfo, TLwHitTestInfo, TLwComparator, TListWindItem, TListWindColumn, TNextItemCode usw.

bool Arrange(TArrangeCode code);
(Botschaft LVM_ARRANGE)

Ordnet das Listenfenster entsprechend code neu an. TArrangeCode ist ein Aufzählungstyp der die Werte Default (LVA_DEFAULT), Left (LVA_ALIGNLEFT), Top (LVA_ALIGNTOP) und SnapToGrid (LVA_SNAPTOGRID) enthält. Bei erfolgreicher Ausführung wird true zurückgeliefert.

HIMAGELIST CreateDragImage(int itemIndex, TPoint* upLeft);
(Botschaft LVM_CREATEDRAGIMAGE)

Erzeugung eines Zieh-Bildes (Drag-Image). itemIndex bezeichnet den Index des Eintrages und upLeft enthält einen Zeiger auf ein TPoint, welches die anfängliche Position der oberen rechten Ecke des Bildes in View-Koordinaten enthält. Bei Erfolg wird ein Handle vom Typ HIMAGELIST zurückgeliefert, welches gelöscht werden sollte. Ist der Aufruf nicht erfolgreich, wird 0 zurückgeliefert.

bool DeleteAllItems();
(Botschaft LVM_DELETEALLITEMS)

Löscht alle Einträge des Listenfensters. Bei Erfolg wird true, ansonsten false zurückgegeben.

bool DeleteAnItem(int itemIndex);
(Botschaft LVM_DELETEITEM)

Löscht den Eintrag mit dem Index itemIndex des Listenfensters. Bei Erfolg wird true, ansonsten false zurückgegeben.

bool DeleteColumn(int colNum);
(Botschaft LVM_DELETECOLUMN)

Löscht in einer Spaltenüberschrift den an der Position colNum befindlichen Eintrag. Bei Erfolg wird true, ansonsten false zurückgegeben.

HWND EditLabel(int itemIndex);
(Botschaft LVM_EDITLABEL)

Editieren des Texteintrags an Position itemIndex. Mit der Übergabe von -1 in itemIndex, kann ein Editiervorgang abgebrochen werden. Der Rückgabewert ist entweder ein Handle des Editier Kontrollelements oder 0.
WICHTIG: Das Kontrollelement muß den Fokus besitzen, bevor diese Funktion aufgerufen wird.

bool EnsureVisible(int index, bool partialOk);
(Botschaft LVM_ENSUREVISIBLE)

Sorgt dafür, daß der Eintrag index vollständig oder wenigstens teilweise sichtbar ist und scrollt falls nötig das Listenfenster Kontrollelement. In partialOk wird angegeben, ob der betroffene Eintrag vollständig sichtbar sein soll (partialOk = false). Bei Angabe von true für partialOk, ist auch eine nur teilweise Anzeige des Eintrags erlaubt. Bei Erfolg wird true, ansonsten false zurückgegeben.

int FindItem(int startIndex, const TLvFindInfo far* findInfo);
(Botschaft LVM_FINDITEM)

Sucht nach einem Eintrag mit den in findInfo angegebenen Eigenschaften. startIndex legt fest, wo die Suche beginnen soll. Soll vom Anfang aus gesucht werden, kann der Wert in startIndex der Wert -1 verwendet werden. Der Rückgabewert entspricht dem Index des gefundenen Eintrags. Tritt ein Fehler auf oder wurde kein passender Eintrag gefunden ist der Rückgabewert -1 (siehe auch LV_FINDINFO).

uint GetCallBackMask();
(Botschaft LVM_GETCALLBACKMASK)

Liefert die Callback-Maske zurück.

bool GetColumn(int index, LV_COLUMN *column);
(Botschaft LVM_GETCOLUMN)

Liefert Informationen einer Spaltenüberschrift mit dem angegebenen index zurück.

bool GetColumn(int index, TListWindColumn& column) const;
(Botschaft LVM_GETCOLUMN)

Liefert Informationen einer Spaltenüberschrift mit dem angegebenen index zurück.

int GetColumnWidth(int index);
(Botschaft LVM_GETCOLUMNWIDTH)

Liefert bei Erfolg die Breite einer Spaltenüberschrift mit dem angegebenen index einer Report- oder Listendarstellung zurück oder andernfalls den Wert 0. Bei einer Listendarstellung wird index ignoriert.

int GetCountPerPage();
(Botschaft LVM_GETCOUNTPERPAGE)

Liefert die Anzahl der vollständig sichtbaren Einträge zurück, die vertikal in die Listen- oder Reportdarstellung passen. Ist die aktuelle Ansicht Icons oder kleine Icons, ist der Rückgabewert die Gesamtanzahl von Einträgen im Kontrollelement.

HWND GetEditControl();
(Botschaft LVM_GETEDITCONTROL)

Gibt ein Handle auf ein Editier-Kontrollelement zurück, in dem Beschriftungen editiert werden. Wenn keine Beschriftung editiert wird, wird der Wert 0 zurückgegeben.

HIMAGELIST GetImageList(TImageListType type);
(Botschaft LVM_GETIMAGELIST)

Gibt bei erfolgreicher Ausführung ein Handle auf eine Bildliste (Image List) zurück, die zum Zeichnen von Listenanzeigen verwendet werden oder den Wert 0. Die zurückzugebende Bildliste wird in type festgelegt. TImageListType ist ein Aufzählungstyp, der die Werte Normal, Small und State definiert, die den Win32 LVSIL_XXXX Konstanten entsprechen.

(Botschaft LVM_GETISEARCHSTRING)
Nach einer Wrapper-Funktion zu dieser Botschaft habe ich in der OWL vergeblich gesucht. Sie können aber auch das Win32 Makro ListView_GetISearchString verwenden.

bool GetItem(TListWindItem& item, int index = -1,int subitem = -1) const;
(Botschaft LVM_GETITEM)

Liefert Attribute des durch index und subitem angegebenen Eintrags in item zurück. TListWindItem ist eine Hülle um eine LV_ITEM Struktur, dessen Element iItem auf index und iSubItem auf subitem gesetzt wird, bevor die Botschaft LVM_GETITEM versendet wird.

int GetItemCount() const;
(Botschaft LVM_GETITEM)

Liefert Attribute des durch index und subitem angegebenen Eintrags in item zurück. TListWindItem ist von der LV_ITEM Struktur abgeleitet, dessen Element iItem auf index und iSubItem auf subitem gesetzt wird, bevor die Botschaft LVM_GETITEM versendet wird.

bool GetItemPosition(int index, POINT far*);
bool GetItemPosition(int index, TPoint& pt) const;
(Botschaft LVM_GETITEMPOSITION)

Diese Funktionen geben die Position der oberen linken Ecke des in index angegebenen Eintrags zurück. In der ersten Funktionsvariante wird ein Zeiger auf eine POINT-Struktur übergeben, in der zweiten eine Referenz auf ein TPoint Objekt. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool GetItemRect(int index, RECT far* r, TItemRectType type);
(Botschaft LVM_GETITEMRECT)

Gibt ein umschließendes Rechteck für den in index angegebenen Eintrag in r zurück. type legt den Rechtecktyp fest, der zurückgeliefert werden soll und kann die Werte Bounds, Icon, Label oder SelectBounds des TItemRectType Aufzählunsgtyp annehmen, welche den LVIR_XXXX Konstanten entsprechen. r->left wird vor dem Senden der Botschaft LVM_GETITEMRECT auf type gesetzt, wie vom Windows SDK verlangt. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

uint GetItemState(int index, uint mask) const;
(Botschaft LVM_GETITEMSTATE)

Gibt den aktuellen Zustand des durch index festgelegten Eintrags zurück. mask legt fest, welche Statusflags zurückgeliefert werden sollen.

int GetItemText(int index, int subItem, char* text, int size) const;
(Botschaft LVM_GETITEMTEXT)

Gibt den Text des durch index und subItem festgelegten Eintrags in text zurück. Ist subItem 0, wird die Bezeichnung des Eintrags index in text geliefert. size bestimmt die Größe des durch text festgelegten Puffers. Der Rückgabewert entspricht der Länge der in text zurückgegebenen Zeichenkette.

int GetNextItem(int index, TNextItemCode code) const;
(Botschaft LVM_GETNEXTITEM)

Gibt bei erfolgreicher Ausführung den Index des nächsten Eintrags nach dem durch index festgelegten Eintrags zurück, der den durch code festgelegten Eigenschaften entspricht. TNextItemCode ist ein Aufzählungstyp, der folgende Relations- und Statusflaggen – entsprechend der LVNI_XXXX Konstanten – zur Verfügung stellt. War der Aufruf nicht erfolgreich, wird -1 zurückgegeben.

bool GetOrigin(POINT far* p);
(Botschaft LVM_GETORIGIN)

Ermittlung der aktuellen Darstellung und Ursprung des Listenfensters. p ist ein Zeiger auf eine POINT Struktur, in welcher der Ursprung übergeben werden soll. Bei erfolgreicher Ausführung ist das Funktionsergebnis true. Wird das Listenfenster als Liste oder Report dargestellt ist das Funktionsergebnis false.

int GetSelCount() const;
(Botschaft LVM_GETSELECTEDCOUNT)

Liefert die Anzahl der selektierten Einträge zurück.

int GetSelIndexes(int* indexes, int maxCount) const;
Füllt das Integer Array indexes mit den Indexen der selektierten Einträge. maxCount bestimmt die Anzahl der Elemente, die indexes maximal aufnehmen kann. Vor dem Aufruf von GetSelIndexes sollte man mit der Funktion GetSelCount die Anzahl der selektierten Einträge ermitteln und dann ein entsprechend dimensioniertes Array und dessen Größe an GetSelIndexes übergeben. Der Rückgabewert entspricht der Anzahl von Indexen, die in das Array indexes eingetragen wurden. Benutzt die Liste LVS_SINGLESEL, d.h. die Mehrfachselektion ist nicht gestattet, wird -1 zurückgegeben.

int GetSelStrings(char far** strs, int maxCount, int maxChars, int subItem = 0) const;
Füllt das Array strs mit den Strings der selektierten Einträge. maxCount gibt die Größe von des strs[] Arrays an. maxChars ist die Größe eines Array Elements. subItem zeigt an, welcher Eintrags-String geliefert werden soll. Wenn ein Fehler auftritt, wird -1 zurückgeliefert, ansonsten entspricht der Rückgabewert der Anzahl der gelieferten Strings.

int GetStringWidth(char far* text);
(Botschaft LVM_GETSTRINGWIDTH)

Liefert die Breite des in text angegebenen Textes basierend auf der aktuellen Schriftart des Listenfensters zurück.

COLORREF GetTextBkColor();
(Botschaft LVM_GETTEXTBKCOLOR)

Liefert die Hintergrundfarbe von Text des Listenfenster zurück.

COLORREF GetTextColor();
(Botschaft LVM_GETTEXTCOLOR)

Liefert die Textfarbe des Listenfenster zurück.

int GetTopIndex() const;
(Botschaft LVM_GETTOPINDEX)
Gibt den Index des obersten sichtbaren Eintrags zurück. Wenn das Listenfenster Symbole darstellt, wird 0 zurückgegeben.

bool GetViewRect(RECT far* r);
(Botschaft LVM_GETVIEWRECT)

Gibt in r das begrenzende Rechteck aller Einträge im Listenfenster zurück. Das Listenfenster muß (kleine) Symbole darstellen. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

int HitTest(TLwHitTestInfo& info);
(Botschaft LVM_HITTEST)

Gibt den Index des durch info festgelegten Eintrags zurück. TLwHitTestInfo ist von der Struktur LV_HITTESTINFO abgeleitet.

int InsertColumn(int colNum, const TListWindColumn& colItem);
(Botschaft LVM_INSERTCOLUMN)

Fügt eine neue Spalte in dem Listenfensters ein. colNum bestimmt den Index der neuen Spalte und colItem die einzufügende Spalte. Der Rückgabewert entspricht dem Index der neuen Spalte. Bei einem Fehler wird -1 zurückgeliefert.

int InsertItem(TListWindItem& newItem, int index = -1);
(Botschaft LVM_INSERTITEM)

Fügt den in newItem angegebenen Eintrag in dem Listenfensters ein. Mit index kann der Index des neuen Eintrags festgelegt werden; per Vorgabe wird -1 verwendet. Ist index -1, wird dieser Wert einfach ignoriert, ansonsten wird das Element newItem.iItem der TListWindItem Referenz auf den angegebenen Index gesetzt. Der Rückgabewert entspricht dem Index des neuen Eintrags oder ist im Fehlerfall -1.
WICHTIG: Mit InsertItem() lassen sich keine Subeinträge einfügen! Um diese zu setzen, müssen Sie die Funktion SetItem() verwenden.

bool IsSelected(int index) const;
Liefert zurück, ob der durch index bestimmte Eintrag selektiert ist (true) oder nicht (false).

bool RedrawItems(int startIndex, int endIndex);
(Botschaft LVM_REDRAWITEMS)

Bewirkt ein Neuzeichnen der Einträge von startIndex bis endIndex, indem der diese Einträge umschließende Bereich als ungültig erklärt wird. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false. Die Einträge werden aber erst beim Auftreten einer WM_PAINT Botschaft tatsächlich neu gezeichnet. Sollen die Einträge sofort neu gezeichnet werden, so muß das explizit geschehen, beispielsweise durch einen Aufruf von UpdateWindow().

bool Scroll(int dx, int dy);
(Botschaft LVM_SCROLL)

Rollt den Inhalt des Listenfensters um die in dx und dy angegebenen Werte. Solange keine Report-Anzeige im Listenfenster vorliegt, legt dx den horizontalen Rollwert und dy den vertikalen Rollwert in Pixeln fest. Bei einer Report-Ansicht gibt dx die Anzahl der zu rollenden Spalten und dy die zu rollenden Zeilen an. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool SetBkColor(COLORREF c);
(Botschaft LVM_SETBKCOLOR)

Hintergrundfarbe des Listenfenster auf c festlegen. Soll keine Hintergrundfarbe verwendet werden kann auch CLR_NONE angeben weden. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool SetCallBackMask(uint mask);
(Botschaft LVM_SETCALLBACKMASK)

Setzt die in mask angegebene Callback-Maske. Die verwendbaren LVIS_XXXX Masken finden Sie im Win32 SDK unter der Beschreibung des ListView_SetCallbackMask Makros und LVM_SETCALLBACKMASK. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool SetColumn(int index, const TListWindColumn& column);
(Botschaft LVM_SETCOLUMN)

Setzt die Attribute der durch index festgelegten Spalte in der Spaltenüberschrift eines Listenfensters mit den in column angegeben. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool SetColumnWidth(int index, int width);
(Botschaft LVM_SETCOLUMNWIDTH)

Ändert die Breite einer Spalte in einer Report- oder Listenansicht auf die in width angegebene Breite. In einer Reportansicht kann mit index die zu ändernde Spalte spezifiziert werden. In einer Listenansicht muß als index -1 angegeben werden. Anstelle einer Angabe in View-Koordinaten kann man für width auch einen der Werte LVSCW_AUTOSIZE oder LVSCW_AUTOSIZE_USEHEADER verwenden. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool SetImageList(HIMAGELIST list, TImageListType type)
(Botschaft LVM_SETIMAGELIST)

Setzen der in list festgelegten Bildliste für den in type angegebenen Typ Normal, Small oder State. Der Rückgabewert ist mir allerdings etwas schleierhaft. Im Win32 SDK ist zu sehen, daß der Rückgabewert von LVM_SETIMAGELIST das Handle einer vorherigen Bildliste des angegebenen Typs zurückliefert oder den Wert 0, wenn diesem keine Bildliste zugeordnet wurde. Die OWL beschränkt sich hier lediglich auf einen Vergleich, ob das Funktionsergebnis ungleich 0 ist und liefert in diesem Fall true (d.h. es wurde bereits eine Bildliste zugeordnet), ansonsten false. Das Handle der vorherigen Bildliste wird aber leider nicht zurückgegeben. Normalerweise ist damit zwar auszukommen, aber für den Fall, daß es in Ihrer Anwendung dennoch nötig sein sollte das vorherige Handle in Erfahrung zu bringen, sollten Sie stattdessen die Botschaft LVM_SETIMAGELIST selbst versenden oder auf das Makro ListView_SetImageList zurückgreifen, nachdem die ImageList intanziiert wurde.

HIMAGELIST hImgLst;
hImgLst = ListView_SetImageList(hWindow, hNewImageList, LVSIL_NORMAL);

bool SetItem(TListWindItem& item, int index = -1, int subitem = -1);
(Botschaft LVM_SETITEM)

Setzen von Eintragsattributen. Wird für index oder subItem ein anderer Wert als der Vorgabewert -1 angegeben, werden die Elemente iItem und iSubItem der in item angegebenen TListWindItem Referenz entsprechend eingetragen. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

void SetItemCount(int numItems);
(Botschaft LVM_SETITEMCOUNT)

Bereitet ein Listenfenster zur Aufnahme einer größeren Anzahl von Einträgen vor. numItems ist schließlich die Anzahl der Einträge, die das Listenfenster aufnehmen soll.

bool SetItemPosition(int index, const TPoint& pt);
(Botschaft LVM_SETITEMPOSITION)

Verschiebt den Eintrag mit dem angegebenen Index im Listenfenster auf die in pt angegebene Position. Das Listenfenster muß dabei die Symbolansicht anzeigen. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.
Es gibt weiterhin auch noch eine funktionsgleiche Botschaft LVM_SETITEMPOSITION32, die allerdings 32-Bit-Koordinaten zur Positionsangabe unterstützt und keinen Rückgabewert liefert. Diese wird von der OWL aber nicht bereitgestellt. Sie können aber auch das Win32 Makro ListView_SetItemPosition32 verwenden.

bool SetItemState(int index, uint state, uint mask);
(Botschaft LVM_SETITEMSTATE)

Ändert den Status des Eintrages index auf den Status state und die Maske mask.

bool SetItemText(int index, const TListWindItem& item);
bool SetItemText(int index, int subItem, const char* text);
(Botschaft LVM_SETITEMTEXT)

Diese beiden Funktionen setzen den Text des durch index angegebenen Eintrages. Die erste Funktionsvariante benutzt dazu eine Referenz auf ein TListWindItem und die zweite neben dem Index noch den Index des Subeintrags (subItem) und den zu setzenden Text (text).

bool SetSel(int index, bool select);
Selektiert (select=true) bzw. deselektiert (select=false) den angegebenen Eintrag mit dem angegebenen Index. Der Rückgabewert zeigt an ob der Aufruf erfolgreich war oder nicht.

bool SetSelIndexes(int* indexes, int numSelections, bool select);
Selektiert (select=true) oder deselektiert (select=false) alle im Array indexes enthaltenen Einträge. numSelections gibt die Anzahl der zu bearbeitenden Einträge an. Der Rückgabewert gibt an, ob der Aufruf erfolgreich war oder nicht. Besitzt das Listenfenster beispielsweise die Eigenschaft LVS_SINGLESEL, ist das Ergebnis false, da nur jeweils ein Eintrag selektiert sein darf.

bool SetSelItemRange(bool select, int first, int last);
Selektiert (select=true) oder deselektiert (select=false) alle Einträge in dem durch first und last angegebenen Bereich. Der Rückgabewert gibt an, ob die Operation erfolgreich war oder nicht. Diese Funktion kann mit Listenfenstern, die den Stil LVS_SINGLESEL besitzen, nicht verwendet werden. SetSelItemRange prüft auf diesen Stil und liefert in einem solchen Fall immer false.

bool SetTextBkColor(COLORREF c);
(Botschaft LVM_SETBKCOLOR)

Setzen der Hintergrundfarbe des Listenfensters, wobei c die neue Hintergrundfarbe festlegt. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool SetTextColor(COLORREF c);
(Botschaft LVM_SETTEXTCOLOR

Setzen der Textfarbe für die Einträge des Listenfensters, wobei c die neue Textfarbe festlegt. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool SortItems(const TLwComparator& Comparator, uint32 lParam = 0);
(Botschaft LVM_SORTITEMS)

Sortieren von Einträgen mit einer benutzerdefinierten Vergleichsfunktion. Comparator ist eine Referenz auf ein TLwComparator beziehungsweise davon abgeleitete Klasse, welche die virtuelle Vergleichsfunktion Compare bereitstellt. Mit lParam kann ein anwendungsbezogener Wert übergeben werden, der an die Vergleichsfunktion weitergegeben wird. Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

bool Update(int index);
(Botschaft LVM_UPDATE)

Aktualisierung des durch index festgelegten Eintrags eines Listenfensters. Ist LVS_AUTOARRANGE gesetzt, wird automatisch angeordnet Bei erfolgreicher Ausführung ist das Funktionsergebnis true, ansonsten false.

THdrItem (OWL)

Diese Klasse repräsentiert einen Eintrag in einem TColumHeader und kapselt die Informationen.

Konstruktoren

THdrItem stellt eine Anzahl von Konstruktoren bereit:

THdrItem(const char far* str);

Parameter Bedeutung
str String. Per Vorgabe wird dieser linksbündig ausgerichtet (HDF_LEFT) und hat die Länge THdrItem::DefaultStringItemSize (Vorgabe 100).

THdrItem(const char far* str, HBITMAP hbm);

Parameter Bedeutung
str String. Per Vorgabe wird dieser linksbündig ausgerichtet (HDF_LEFT) und hat die Länge THdrItem::DefaultStringItemSize (Vorgabe 100).
hbm Bitmap-Handle. Per Vorgabe linksbündig ausgerichtet (HDF_LEFT) mit der Länge THdrItem::DefBitmapItemSize (Vorgabe 32).

THdrItem(HBITMAP hbm);

Parameter Bedeutung
hbm Bitmap-Handle. Per Vorgabe linksbündig ausgerichtet (HDF_LEFT) mit der Länge THdrItem::DefBitmapItemSize (Vorgabe 32).

THdrItem(char far* buffer, int len, uint msk = HDI_TEXT);
Dieser Konstruktor erzeugt ein „leeres“ Objekt. Wird überwiegend zur Ermittlung von Informationen aus einem bereits vorhandenen THdrItem-Objekt verwendet.

Parameter Bedeutung
buffer Speicherbereich, der die Informationen empfangen soll
len Größe des übergebenen Puffers.
msk Eine einzelne HDI_XXXX oder daraus kombinierte Konstante. Vorgabe ist HDI_TEXT.

THdrItem(uint msk = 0);
Erzeugt ein „leeres“ Objekt. Wird überwiegend zur Ermittlung von Informationen aus einem bereits vorhandenen THdrItem-Objekt verwendet. In msk kann die zu aktivierende Maske (HDI_XXXX) angegeben werden.

Parameter Bedeutung
msk Die zu aktivierende Maske (einzelne HDI_XXXX Konstante oder Kombination daraus). Vorgabewert ist 0.

Elementfunktionen

void SetBitmap(HBITMAP hbm);
Setzt das Bitmap-Handle des Objekts. hbm bezeichnet ein Handle auf eine Bitmap. Die aktuelle Maske wird um HDI_BITMAP und HDI_FORMAT erweitert. Außerdem wird das Format HDF_BITMAP gesetzt.

void SetHeight(int cy);
Setzt das Element auf die in cy angegebene Höhe. Dazu wird ein eventuell vorhandenes HDI_WIDTH aus der Maske entfernt und HDI_HEIGHT gesetzt.

void SetItemData(TParam2 data);
Setzt das Element lParam der HDI_ITEM Struktur auf data und fügt der Maske HDI_LPARAM hinzu.

void SetMask(int msk);
Setzt das Element mask der HD_ITEM Struktur auf msk.

void SetText(const char far* str);
Setzt den Text des Objekts auf str. Die Maske wird um HDI_TEXT und HDI_FORMAT erweitert und als Format wird HDF_STRING gesetzt.

void SetWidth(int cx);
Setzt das Element auf die in cx angegebene Höhe. Dazu wird ein eventuell vorhandenes HDI_HEIGHT aus der Maske entfernt und HDI_WIDTH gesetzt

TColumnHeader (OWL)

Diese Klasse stellt zusammen mit THdrItem ein Fenster mit horizontalen Spaltenüberschriften bereit. Die Spaltenüberschriften werden von THdrItem repräsentiert. TColumnHeader ist hauptsächlich zum Einsatz in einem TListWindow gedacht, kann aber dank der Klasse TColumnHeader auch separat verwendet werden. Die Klasse TListWindow stellt ebenfalls eine Unterstützung für Spaltenüberschriften zur Verfügung, kann aber nur unter Win32 verwendet werden.

TColumnHeader ist normalerweise nur unter Win32 verfügbar. Dieses Dialogelement wird allerdings von ObjectWindows emuliert. Sie können unter Win16 also nur über die von der OWL bereitgestellten Schnittstellen darauf zugreifen!

Die Spaltenüberschriften bieten folgende Optionen an:

  • Der Anwender kann die Spaltenbreite nach Bedarf verändern
  • Jede Überschrift kann einen Text, eine Bitmap und einen 32-Bit Wert (siehe HDI_LPARAM) aufnehmen. Letzterer muß von der Anwendung interpretiert werden.
  • Ein Mausklick auf eine Überschrift kann wie bei einem Schalter eine Aktion einleiten.(EV_HDN_ITEMCLICK).

TColumnHeader Teilhierarchie

Konstruktor zur direkten Erzeugung

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

Parameter Bedeutung
parent Übergeordnetes Fenster.
id Eindeutige Steuerelement ID
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. Der Vorgabewert ist 0.

Mit der Elementfunktion SetStyle können auch folgende Stile für TColumnHeader verwendet werden:

Stilkonstante Bedeutung
HDS_BUTTONS Die Einträge der Spaltenüberschrift verhalten sich wie Schalter.
HDS_HIDDEN Weist darauf hin, daß ein Eintrag zum Verbergen bestimmt ist. Dieser Stil verbirgt das Element aber nicht, sondern bewirkt bei einer HDM_LAYOUT Botschaft die Rückgabe von 0 im Datenelement cy einer WINDOWPOS Struktur. Sie sollten das Element dann durch Setzen der Höhe 0 verbergen.
HDS_HORZ Die Spaltenüberschrift ist horizontal.

Konstruktor zur Erzeugung aus einer Ressource

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

Wichtige Elementfunktionen

int Add(const THdrItem& item);
Fügt über einen Aufruf von Insert(item,GetCount()) der Überschriftenzeile einen neuen Eintrag hinzu. item enthält eine Referenz auf den Eintrag vom Typ THdrItem. Der Rückgabewert entspricht der Funktion Insert.

bool Delete(int index);
Mit dieser Funktion wird ein Eintrag aus der Überschriftenzeile entfernt. index bezeichnet den Index des Eintrags in der Überschriftenzeile. Das Funktionsergebnis gibt an, ob der Eintrag entfernt wurde (true) oder nicht (false).

int GetCount() const;
Liefert die Anzahl der Einträge, die in der Überschriftenzeile enthalten sind. Im Fall eines Fehlers, wird -1 zurückgeliefert.

bool GetItem(THdrItem& iteminfo, int index,uint mask = 0);
Mit dieser Funktion lassen sich Informationen über einen bestimmten Eintrag ermitteln. index bezeichnet den Index des betreffenden Eintrags und itemInfo eine Referenz des Typs THdrItem, in der die Informationen eigetragen werden. mask kann eine oder eine Kombination von HDI_XXXX Konstanten enthalten, um festlegen zu können, welche Informationen kopiert werden sollen. HDI_WIDTH und HDI_HEIGHT bestimmen das gleiche Element in der Windows-Struktur HD_ITEM. Der Rückgabewert gibt an, ob die Operation erfolgreich war oder nicht.

int Insert(const THdrItem& item, int index);
Fügt den Eintrag item an der in index festgelegten Position ein. Der Rückgabewert gibt an, ob die Operation erfolgreich war (true) oder nicht (false).

bool SetItem(const THdrItem& itemInfo, int index);
Aktualisierung der durch itemInfo spezifizierten Attribute des Eintrags an Position index. Der Rückgabewert gibt an, ob die Operation erfolgreich war (true) oder nicht (false).

Benachrichtigungsbotschafts-Makros

EV_HDN_BEGINTRACK(id, Function)
Der Benutzer beginnt mit dem Ziehen einer Teilung. Der Funktionsprototyp für dieses Botschaftsmakro ist
bool Function(THdrNotify far&);

EV_HDN_ DIVIDERDBLCLICK(id, Function)
Der Benutzer hat einen Doppelklick auf eine Teilung ausgeführt. Der Funktionsprototyp für dieses Botschaftsmakro ist
void Function(THdrNotify far&);

EV_HDN_ENDTRACK(id, Function)
Der Benutzer beendet einen Ziehvorgang. Der Funktionsprototyp für dieses Botschaftsmakro ist
void Function(THdrNotify far&);

EV_HDN_ITEMCHANGED (id, Function)
Merkmal eines Überschriftenteils hat sich geändert. Der Funktionsprototyp für dieses Botschaftsmakro ist
void Function(THdrNotify far&);

EV_HDN_ITEMCHANGING (id, Function)
Merkmal eines Überschriftenteils ist sich gerade am verändern. Der Funktionsprototyp für dieses Botschaftsmakro ist
bool Function(THdrNotify far&);

EV_HDN_ITEMCLICK (id, Function)
Der Anwender hat auf einen Überschriftenteil geklickt. Der Funktionsprototyp für dieses Botschaftsmakro ist
void Function(THdrNotify far&);

EV_HDN_TRACK (id, Function)
Der Anwender hat eine Teilung gezogen. Der Funktionsprototyp für dieses Botschaftsmakro ist
bool Function(THdrNotify far&);