CListCtrl::GetSelectedColumn()
-
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 ??
-
Hallo,
da bist du wohl mit der Dokumentation durcheinander gekommen, denn die Methode 'GetSelectedColumn' gibt es erst seit der MFC-Version, die mit Visual Studio .NET ausgeliefert wird:
es gibt sie aber nicht für Visual C++ 6:
MfG
-
lol
ich nutze ja Visual Studio NET MFC C++ auf WinXP Pro. Komisch das ich beim Kompilieren ja dann ne Fehlermeldung bekomme
welche Methode sollte ich deiner Meinung nach benutzen ??? die mir denn Index einer selektierten Zeile zurückliefert ?
-
habs hinbekommen.. Multiselection.. dass muss man schon beachten LOL
hier die Lösung:
void CListAllDlg::OnBnClickedDelete() { int nItem=0; POSITION pos = m_list_all.GetFirstSelectedItemPosition(); do { if (MessageBox("Möchten Sie diesen Datensatz wirklich löschen?","Diesen Datensatz löschen?", MB_YESNO | MB_ICONQUESTION) == IDYES) { nItem = m_list_all.GetNextSelectedItem(pos); m_list_all.DeleteItem(nItem); //delete }//end if } while (pos != NULL);//end while }//end OnBnClickedDelete
-
verstehe ich jetzt nicht, was hat denn GetSelectedColumn mit Multiselection zu tun
Und warum wurde vorher die Meldung, daß GetSelectedColumn nicht bekannt ist, ausgegeben, wenn du doch mit der .NET-MFC-Version arbeitest? Ich konnte ja nicht davon ausgehen, daß es ein anderes Problem war, das interessiert mich jetzt, da ich noch nicht mit der "neuen" MFC gearbeitet habe, warum soll eine Klassen-Methode vorher unbekannt sein, und auf einmal nicht mehr? Auch sehe ich in deinem Code keinen Aufruf von 'GetSelectedColumn' ? (Column ist eine Spalte, du zeigst aber Code, der eine Zeile löscht, also das mußt du mir erklären) Wahrscheinlich ging es dir von Anfang an um das Löschen von Zeilen, und du hast versehentlich nach der Methode 'GetSelectedColumn' gesucht, oder (aber diese Methode muß es geben, kann es sein, daß es sie in .NET-Studio 2002 nicht gab, aber jetzt in .NET-Studio 2003? Verwendest du 2003 oder 2002?) ?
MfG
-
Sorry dass ich den Beitrag nochmal nach oben hol ...
Ich versuche auch die Methode GetSelectedColumn zu benutzen, bekomme aber auch folgende Meldung:error C2039: 'GetSelectedColumn': Ist kein Element von 'CListCtrl'
d:\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxcmn.h(241): Siehe Deklaration von 'CListCtrl'Ich benutze Visual Studio .NET 2003 , damit sollte es ja eigentlich gehen ...
weiß jemand was da los ist?
-
Oder kann mir jemand sagen, wie ich anders an das ausgewähle Listenelement komme?
-
unter VC++ 6.0 mach ich's so:
http://www.c-plusplus.net/forum/viewtopic.php?t=75781&highlight=
Gruß T.
-
Hallo,
wahrscheinlich wurde ein #ifdef/#endif-Konstrukt verwendet, um GetSelectedColumn "auszublenden". Dies solltest du feststellen können, wenn du in der Datei afxcmn.h nachsiehst und nach GetSelectedColumn suchst.
Die API-Funktion (besser gesagt, die Nachricht ..., die verschickt wird), die durch GetSelectedColumn gekapselt wird, ist erst ab Windows XP verfügbar, siehe "Message Inforamtion" und "Remarks" unter:
Man muß dann auf WINVER achten, siehe:
http://msdn.microsoft.com/library/DEU/vccore/html/vcgrfModifyingWINVER.asp
und dies umstellen, aber dann läuft das Programm auch nur ab XP korrekt. Also vielleicht besser anders vorgehen, wenn man sich den Aufwand sparen will.
MfG
-
Ich hab das hier gefunden. Wie änder ich das am Besten ab?
Einfach das #if und #endif weglassen?#if (_WIN32_WINNT >= 0x0501) LRESULT SetSelectedColumn(int iCol); DWORD SetView(int iView); DWORD GetView() const; LRESULT InsertGroup(int index, PLVGROUP pgrp); int SetGroupInfo(int iGroupId, PLVGROUP pgrp); int GetGroupInfo(int iGroupId, PLVGROUP pgrp) const; LRESULT RemoveGroup(int iGroupId); LRESULT MoveGroup(int iGroupId, int toIndex); LRESULT MoveItemToGroup(int idItemFrom, int idGroupTo); void SetGroupMetrics(PLVGROUPMETRICS pGroupMetrics); void GetGroupMetrics(PLVGROUPMETRICS pGroupMetrics) const; LRESULT EnableGroupView(BOOL fEnable); BOOL SortGroups(PFNLVGROUPCOMPARE _pfnGroupCompare, LPVOID _plv); LRESULT InsertGroupSorted(PLVINSERTGROUPSORTED pStructInsert); void RemoveAllGroups(); BOOL HasGroup(int iGroupId) const; BOOL SetTileViewInfo(PLVTILEVIEWINFO ptvi); BOOL GetTileViewInfo(PLVTILEVIEWINFO ptvi) const; BOOL SetTileInfo(PLVTILEINFO pti); BOOL GetTileInfo(PLVTILEINFO pti) const; BOOL SetInsertMark(LPLVINSERTMARK lvim); BOOL GetInsertMark(LPLVINSERTMARK lvim) const; int InsertMarkHitTest(LPPOINT pPoint, LPLVINSERTMARK lvim) const; int GetInsertMarkRect(LPRECT pRect) const; COLORREF SetInsertMarkColor(COLORREF color); COLORREF GetInsertMarkColor() const; BOOL SetInfoTip(PLVSETINFOTIP plvInfoTip); UINT GetSelectedColumn() const; BOOL IsGroupViewEnabled() const; COLORREF GetOutlineColor() const; COLORREF SetOutlineColor(COLORREF color); void CancelEditLabel(); #endif // _WIN32_WINNT >= 0x0501
β
-
nein, bloß nie in Header-Dateien deines Compilers etwas ändern, die sind tabu für dich (außer, daß man sie sich auch einmal ansehen kann aus Interesse, oder eben, wenn es unerwartete Fehler wie diesen gibt)
Am einfachsten schreibst du ein #define in die stdafx.h-Datei, das den Wert definiert, durch den die Funktionen verfügbar werden:
#define _WIN32_WINNT 0x0501
diese Zeile sorgt dafür, daß man auch Funktionen verwenden kann, die nur ab Windows XP funktionieren. Evtl. muß man noch ein #define für WINVER setzen. Mit Sicherheit muß man aber auch noch dafür sorgen, daß die richtige Version der Comctl32.dll benutzt wird (über eine manifest-Datei).
MfG