Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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

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

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);

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.