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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...