Probleme mit horizontal scrollen bei CListBox



  • Ich habe ein Problem mit einem CListBox; als nicht so ganz MFC-Profi versuche ich eine Liste von Dateien und Pfaden in die Listbox zu bekommen, was bestens klappt, aber es lässt sich nicht scrollen; der ScrollBar ist deaktiviert. Nun habe ich folgendes herausgefunden:

    lstPlaylist.SetHorizontalExtent(m_Extent.cx);
    

    Wenn ich irgend einen Integer-Wert einsetze dann funktioniert es, allerdings muss ich die Länge des Strings (bzw. des längsten Strings) herausfinden. Dazu wollte ich

    CDC* ListDC=lstPlaylist.GetDC();
    ...
    m_Extent=ListDC->GetOutputTextExtent(oeffnenDlg.GetNextPathName(filePos));
    

    einsetzen, erhalte aber eine unbehandelte Ausnahme. Was mache ich da falsch?

    Später möchte ich dass sofort automatisch ganz nach rechts gescrollt wird, weiss jemand gerade wie ich das bewerkstelligen kann?

    Vielen Dank!


  • Mod

    Dann schau Dir den Callstack an und sie nach auf welche Variable zugefriffen wird, die nichtinitialisiert ist.

    Ansonsten musst Du nicht nur den DC holen, sondern auch den richtigen Font setzen.
    BTW: Direkt mit der Klasse CClientDC zu arbeitengeht weitaus einfacher.



  • Das hat geklappt, danke!
    Weisst Du wie ich die ListBox veranlassen kann nach rechts zu scrollen bzw. aus dem Programm heraus zu scrollen?


  • Mod

    Hmmmm...
    Eine Funktion bzw. Nachricht gibt es dafür IMHO nicht, aber Du könntest WM_HSCROLL senden.



  • OK verwende ohnehin (zu viel) SendMessage gerne 🙂 Kann ich so ein "Extent"-Wert gleich als Parameter verwenden?


  • Mod

    Kann ich Dir nicht sagen. Besorge Dir die, den Range für den Scrollbar. Ich vermute, dass der exakt HorzontalExtent-Fensterbreite ist.
    Du könntest dann den Offset mit SB_THUMBPOSITION übergeben.



  • OK bestens, werde ich beim nächsten Mal programmieren daran machen. Heute ging ja viel vorwärts in Sachen MFC. Danke!



  • Wie komme ich korrekt an den Scrollbar? Versuchte nun folgendes:

    //lstPlaylist.SendMessage(WM_HSCROLL, (LPARAM)NULL,(WPARAM)m_Extent.cx);
    	   //lstPlaylist.GetScrollBarCtrl(1)->SendMessage(WM_HSCROLL, (LPARAM)NULL,(WPARAM)m_Extent.cx);
    

    bei GetScrollBarCtrl muss etwas nicht stimmen; ich dachte 0 steht für den vertikalen und 1 für den horizontalen Bar oder was muss ich da angeben?

    Danke


Anmelden zum Antworten