Listbox in einem EditView

Thopeto

Erfahrenes Mitglied
Hallo

ich möchte gern eine Listbox in meinem MDI EditView einbauen. Das Problem ist nur, das ich sie anfang nur mal erstellen möchte, egal wo auf dem Bildschirm, aber es kommt bei mir immer ein Fehler.

Ihr müsst euch das wie....die IntellSense Box bei VC++ vorstellen.

Auch wenn manche jetzt lachen, aber wie mach ich das?! Hab mal versucht die Listbox zu erstellen:

PHP:
	CRect rc;

	rc.top = GetCursorPos().y+100;
	rc.left = GetCursorPos().x;
	rc.right = rc.left+100;

	if (!m_ListBox.m_hWnd)
	{
    	if(!m_ListBox.Create(CBS_DROPDOWNLIST | WS_VSCROLL | WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_HASSTRINGS , rc, this,IDC_ACLIST))
		{
			AfxMessageBox("Fehler beim erstellen der Listbox");
		} 
		m_ListBox.SetFont(GetParent()->GetFont());

		m_ListBox.AddString("hallo");
		m_ListBox.AddString("bye");
		m_ListBox.SelectString(0,"hallo");

		m_ListBox.MoveWindow(&rc);
	}
	else
	{
		AfxMessageBox("Fehler");
	}

Ich hab alle Funktionen ausprobiert, die mir eingefallen sind, aber jetzt bin ich mit meinem Latein am ende.

gruß
Thorsten
 
So, ich habe mal rausgesucht, was ich damals gemacht habe. Du findest die MFC-Klasse CPopUpList, die ich von der normalen CListBox abgeleitet habe. Dem Dialog oder wer auch immer so ein Popup kriegen soll, verpasst du eine Membervariable dieses Typs. Dieser Instanz wird noch das eigene Windowhandle übergeben, damit die Liste ihr Hauptfenster benachrichtigen kann.
Wann immer eine Popup-Liste gebraucht wird, muss sie positioniert, mit Daten gefüllt und angezeigt werden. Man kann auch mit m_cstrVorgabe vorgeben, was zu Beginn gewählt sein soll. Wenn in der Liste mit Return oder Doppelklick eine Auswahl getroffen wurde, schliesst sie sich und benachrichtigt ihr Parentfenster. In der dortigen WindowProc wird diese Message abgefangen und man kann dort mittels m_cstrChoice erfahren, was gewählt wurde.

Entschuldige das unaufgeräumte Denglisch im Code -- ich habe jetzt nicht die Zeit, mein damaliges "Geschlampe" hinfort zu editieren.

Ich hoffe, dass du mit dem ganzen etwas anfangen kannst. Hinweise zur Verwendung sind in der beigelegten Textdatei. Frag nach, wenn was unklar ist.
 

Anhänge

  • mfc popupliste.zip
    2,9 KB · Aufrufe: 20
sieht sehr gut schon mal aus. vielen dank!

aber ich habe probleme bei dem einbau in meine app und zu testen obs geht :)

was ist CHeaderCtrl und m_ctlListConfigs !

gruß
Throsten
 
Uups, da habe ich vergessen, die Bezüge auf meine Applikation rauszunehmen. Das war das Listcontrol, vor dem die Listbox aufgehen sollte, und das Headercontrol des Listcontrol. Die brauchst du nicht; sie sind nur drin, weil ich sie zur Positionsberechnung benötigt habe. Die Popupliste wurde nämlich verwendet, um Listitems zu editieren; in einer mehrspaltigen Liste. Dazu habe ich sie immer unter oder über dem Listitem eingeblendet.

Wenn du den Einbau nicht hinbekommst, kann ich mal eine Beispielanwendungs machen. Das schaffe ich allerdings vermutlich erst in ein paar Tagen.
 
werde das irgendwie versuchen zu deixeln. ich wills auch jetzt nicht übertreiben, allein das du den source gepostet hast, finde ich sehr nett von dir.

soltle ich unterwegs probleme haben, wirst du von mir bestimmt noch hören :rolleyes:

aber viiiiiiiiiiieeeeeeeeeeeelen dank!:)
 
ich glaub, ich brauche doch hilfe *g*

mein prob ist halt, das ich es in einen CEditView einfügen muss
 
Zuletzt bearbeitet:
Ich versuch mal ein 08/15-Beispielprojekt zu bauen. Das kann aber ein paar Tage dauern. Poste hier eine Antwort zur Erinnerung, falls ich es in einer Woche noch nicht gemacht habe -- dann habe ich es nämlich vergessen. :)
 
So, ich habe tatsächlich die Zeit gefunden!

Beiliegend ein Beispiel-VS.Net-Projekt. Es handelt sich um eine MFC-SDI-Anwendung mit einem CEditView als Viewklasse. Ich habe die PopupListen-Dateien zugefügt und nur die allernötigsten Änderungen gemacht, um das Ganze beispielhaft zum Laufen zu bringen, und zwar in der Datei für die Viewklasse Kommentare sind auch dabei.

Die Positionierung der Liste musst du aber selbst übernehmen -- das war mir jetzt zu lästig.

Ich hatte übrigens das OnCreate in meinem letzten Zip vergessen.

Also, viel Erfolg!

----

Übrigens funktioniert das Einfügen des Popups bei jedem Parentwindow gleich. Ich habe das Ding sowohl für einen Dialog mit einem CListrCtrl verwendet als auch für einen (abgeleiteten) CEditView.
 

Anhänge

  • PopupListDemo.zip
    50,5 KB · Aufrufe: 22
Zuletzt bearbeitet:
Zurück