Zum Inhalt springen

[VC++6,SP6,MFC]CCheckListBox Item markieren mit 'rechts' und Kontextmenü


Empfohlene Beiträge

Geschrieben

Servus,

ich habe in einem Dialog ein Steuerelement von Typ CCheckListBox.

In diesem Kann ich die einzelnen Items mit der rechten Maustaste

markieren. Die Eigenschaften stehen u.a. auf Einzelauswahl.

Ich habe mir überlegt, dass ich die Items aber auch gerne mit der

rechte Maustaste markieren und ein Kontextmenu anzeigen möchte.

so sieht mein Code aus:

void CMyDlg::OnContextMenu(CWnd* pWnd, CPoint point) 

{


//	Info: CCheckListBox	m_lbFileList;


	CRect rect;

	BOOL bIsItem = FALSE;

	int iStep = 0, iCount = m_lbFileList.GetCount();

	while (iStep < iCount && bIsItem == FALSE)

	{


		m_lbFileList.GetItemRect(iStep,rect);

		ClientToScreen(&rect);

		bIsItem = rect.PtInRect(point);

		iStep++;

	}

	if (bIsItem == TRUE)

	{

		m_lbFileList.SetCurSel(iStep-2);


		CMenu menu;

		if (menu.LoadMenu(IDR_MENU_LIST))

		{

			CMenu *psmenu = menu.GetSubMenu(0);

			ASSERT(psmenu);

			psmenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x ,point.y, this); 

		}	

	}


}

Diese Code funktioniert, bis auf einen kleinen Fehler. Wenn ich auf den letzten

Eintrag der ListBox klicke (rechts), wird der Eintrag nicht markiert und ich bekomme

kein Menü. (bIsItem = FALSE)Bei allen anderen Items Funktioniert der Code.

Meine Frage, was übersehe ich hier?

Gibt es einen anderen, besseren Ansatz?

Ciao TinTin

Geschrieben
Ich würde CListBox::ItemFromPoint benutzen.

Die MSDN sagt dazu folgendes:

Note

Because the Win32 message LB_ITEMFROMPOINT works only with Windows 95, ItemFromPoint, which wraps the Win32 message also works only with Windows 95.

Und Sie hat recht, unter win2000 bekomme ich kein brauchbaren Ergebnisse,

darum ja der ganze 'Quatsch'.

Geschrieben

Stimmt, die tut's nicht.

Aber das iStep - 2 macht mich stutzig. Ich vermute, dass du die Koordinaten falsch umrechnest. Die Koordinaten von GetItemRect sind relativ zur Listbox, aber du rechnest über deinen Dialog in Bildschirmkoordinaten um. Damit hast du eine Verschiebung. Rechne bitte mal so um:

[b]m_lbFileList.[/b]ClientToScreen(&rect);

Geschrieben

Sorry, hatte heute erst Zeit...

Aber das iStep - 2 macht mich stutzig.

Richtig, dass sollte dich stutzig machen.

[b]m_lbFileList.[/b]ClientToScreen(&rect);

Code funktioniert!

Danke

TinTin

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...