CListCtrl::GetSelectedColumn()

Indian

Erfahrenes Mitglied
Hi

CSortList ist eine Klasse welche ich eingebunden hab, die mir erlaubt in einer Listbox vom Typ CListCtrl denn Inhalt zu sortieren, wenn ich auf einem der Header klicke. Diese Klasse ist von CListCtrl public abgeleitet.

class CSortListCtrl : public CListCtrl
{
// Construction
public:
CSortListCtrl();

Alles funktioniert wunderbar. Jedoch funktioniert

GetSelectedColumn()

nicht und ich weiss nicht warum :mauer: . Alle anderen Methoden funktionieren ohne probleme. Ich bekomme andauernd die Fehlermeldung

'GetSelectedColumn' : is not a member of 'CSortListCtrl'. Aber es ist doch von CListCtrl abgeleitet also müsste GetSelectedColumn ja auch verfügbar sein.

kann mir jemand helfen
 
GetSelectedColumn ist ein Member von CListCtrl, aber erst ab XP.

Die MSDN meint dazu, man muss das Manifest für CommCtrl 6.0 einbinden (das Manifest, das XP-Themes zulässt). _WIN32_WINNT muss auch >= 0x0501 (also XP) sein, dann sollte die Funktion auch verfügbar sein.

Dein Programm läuft dann aber auch nur noch auf XP.


Evtl. bist du besser dran, die Funktionalität zu emulieren. Das geht dann über die CHeaderCtrl, die du vom CListCtrl bekommen kannst. Diese sendet Notification-Messages (HDN_irgendwas) an sein Parent.
 
..hmm

also ich nutze WinXP Pro mit und Programmiere mit Visual Studio NET in C++. Laut VS NET MSDN kann ich getSelectedItem() nutzen.

Wenn ihr meint ich kann das nicht. Gibt es eine andere Methode welche mir denn Index von einer SELEKTIERTEN Zeile in einer Listbox zurückliefert ? Hab auch keine Methode gefunden die mir von einem einer Zeile denn Index zurückliefert

:(

:rolleyes:
 
Sinnloses Gefasel zum Thema Windows-Version:
Das mit dem XP ist beim kompilieren eine andere Sache als das Betriebssystem, auf dem du kompilierst. Damit ist gemeint, dass du angeben kannst, welche Windows-Version dein Programm unterstützt. Das gibst du aber selbst an (über Defines); das wird NICHT über das installierte Windows festgelegt.

Selektiertes Item:
Achtung, jetzt sagst du ListBox. Bedenke, Sterblicher, es gibt CListBox und CListCtrl, welche zwei verschiedene Controls sind.

CListCtrl:
Da hier generell Mehrfachselektion möglich ist, geht das etwas komplizierter:

POSITION pos = m_myListCtrl.GetFirstSelectedItemPosition( );

while ( pos != NULL )
{
int nItem = m_myListCtrl.GetNextSelectedItem( pos );
}

Ähnlich dem Iterator bei STL-Containern.

CListBox:
Einfachselektion:

int nItem = m_myListBox.GetCurSel();

Mehrfachselektion:

Hab ich noch nie benutzt, macht man wohl mit GetSelCount und GetSelItems.
 
jetzt ist es klar wegen der Mehrfachselektion. ;)

hab noch ein kleines Selektions problem

Bei mir wird die selektion immer grau. Wenn ich aber myListCtrl.setFocus() mache verlier ich denn Focus im Textfeld obwohl der Cursor dort immer blinken soll. Beide Ressourcen sind ja auf dem selben dialog.

Ich nutze das Textfeld als suchfunktion in der CListCtrl. Bei jedem Tastenschlag wird das richtige Element markiert, wenn das zu suchende String mit dem in der Listbox übereinstimmt, jedoch ist die selektion grau :(. Möchte jedoch das sie blau ist und der Focus im Textfeld auch nicht verloren geht.

Ist das möglich
 
Zuletzt bearbeitet:
Zurück