CTreeCtrl und Mauszeiger

Baron Sengir

Mitglied
Hallo Ihr Lieben,

Ich habe ein CTreeCtrl mit einer Member-Variablen drauf namens m_Playlist.

Nun will ich feststellen, über welchem Element in der Liste der Mauszeiger steht. Probeweise wollte ich mir den Eintrag mittels MessageBox ausgeben lassen. Eigentlich ja ganz einfach, dachte ich. Also habe ich folgendes gecodet:

Code:
CString temp;
CPoint point;
GetCursorPos(&point);
UINT flags;
HTREEITEM hItem = m_Playlist.HitTest(point, &flags);
temp = m_Playlist.GetItemText( hItem );
MessageBox( temp );

Und tada: ich bekomme eine leere MessageBox angezeigt, also zeigt die Maus auf kein Item. Tut sie aber, sehe ich ja :-(

Was mache ich falsch und wie geht's richtig?

Meinen Dank habt Ihr schon einmal vorweg.

LG
 
Hi,
die Cursor-Koordinaten sind Screen-Koordinaten. Du brauchst aber Client-Koordinaten. Also mußt du schreiben
Code:
CString temp;
CPoint point;
GetCursorPos(&point);

ScreenTo Client(&point);

UINT flags;
HTREEITEM hItem = m_Playlist.HitTest(point, &flags);
temp = m_Playlist.GetItemText( hItem );
MessageBox( temp );
Dann sollte es klappen.

Mfg

langer
 
Hi,

Danke für den Hinweis. Klappt aber so nicht.

ABER: Durch Herumprobieren habe ich jetzt eine funktionierende Lösung gefunden:

Code:
	CString temp;
	CPoint point;
	GetCursorPos(&point);
	m_Playlist.ScreenToClient(&point);

	UINT flags;
	HTREEITEM hItem = m_Playlist.HitTest(point, &flags);
	temp = m_Playlist.GetItemText( hItem );
	MessageBox( temp );

Ich weiß zwar nicht so genau, warum das jetzt funktioniert, aber es klappt - und das ist die Hauptsache.

Kann mir jemand kurz sagen, warum dies nun funktioniert?

Liebe Grüße
 
Zurück