wxWidgets: GetMultiLineTextExtent() nur im wxDC ??



  • Hallo nochmal..,
    Im Grunde genommen bin ich immernoch beim wxStaticText. Ich wollte mir quasi zur Übung die AutoResize-Fähigkeit, die man mit wxST_NO_AUTORESIZE abstellen kann, nachbauen.
    Dazu brauche ich natürlich den Platz der vom Text (Label) eingenommen wird. Für Einzeiler auch kein Problem. Es gibt nämlich wxWindow::GetTextExtent().
    Das Problem ist nur, dass dabei alle "\n" ignoriert werden.

    1. Was soll das?

    Dann habe ich durch zufälliges Googeln herausgefunden, dass es noch wxDC::GetMultiLineTextExtent() gibt. Allerdings sind die wenigsten Widgets wxDCs...
    Also:
    2) Muss ich dann nur für diese Funktion ein Dummy-wxDC (bzw. ein passendes abgeleitetes) erstellen?! - Oder habe ich da was übersehen..

    Naja, diesmal immerhin nur absichtlich erzeugte Probleme...

    MfG,
    Klon457



  • Uhm, du musst einfach nur das PaintEvent anzapfen. Da kannst dann deinen wxDC erstellen und zeichnen. Das geht mit jedem Element.



  • Mal angenommen, ich müsste das Paint-Event sonst nicht anzapfen, dann sollte doch egal sein, wo ich ein wxDC erstelle, oder? Ich würde es lieber lokal machen, damit ich weniger 'umleiten' muss..

    Aber nochmal zurück zu 1). Könnte es sein, dass die Entwickler ein wxWindow::GetMultiLineTextExtent() einfach vergessen haben?! - Die Einzeilerversion wxWindow::GetTextExtent() gibt's ja und auch sonst gibt es für alles mindestens 2 Lösungswege, na gut mindestens einen..

    Das bringt mich auf eine neue Frage:
    Mal angenommen, ich baue mir diese Funktion selbst. Kann ich die irgendwie in die vorhandene wxWindow-Klasse integrieren?? Sprich zB. eine davon abgeleitete Klasse so nennen, wie die ursprüngliche und dem Compiler dann immer die veränderte statt der originalen Klasse verabreichen. Oder muss ich da im Quellcode rumpfuschen?
    Also nochmal allgemeiner gefragt: Ich habe eine Basis-Klasse, zu der irgendeine Funktionalität hinzugefügt werden soll, damit auch alle abgeleiteten Klassen darauf zugreifen können. Geht das ohne die Basis-Klasse zu verändern?
    Ich stelle mir da sowas vor, wie eine Modul-/Plugin-Klasse, die man bei Bedarf zur entsprechenden Klasse hinzuladen kann, um sie zu erweitern..
    Wenn das garnicht geht, bleibt mir doch nur, außer im Quelltext rumzufummeln, dass ich jedesmal, wenn ich die neue Funktion brauche, sie jeweils zu den gewünschten Objekten direkt hinzufüge, statt einmal zur gemeinsamen Basis der Objekte, oder?!
    ⚠ Hat jetzt nichtmehr viel mit wxWidgets zutun, darum gibt's den Teil nochmal im C++-Unterforum...



  • Kannst du mal bitte die Doku lesen? Da steht eigentlich alles drin zu DC's.

    Und nein, das geht nicht bezüglich wxWindow ohne im Quelltext rumzupfuschen wie du es nennst.



  • Kannst du mal bitte die Doku lesen? Da steht eigentlich alles drin zu DC's.

    Na hör mal, ich mache quasi nichts anderes.. Das Problem ist nur, dass ich nichts lesen kann, was nicht da steht.
    Ich gebe diese Bitte mal direkt zurück, da ich nicht verstehe, warum du dich immer auf wxDCs versteifst. Es sollte klar sein, dass ein wxDC nur Mittel zum Zweck ist, da es letztlich vom Fenster abhängt, aber keinesfalls nötig ist! - Wie man auch an der Einzeilerversion sehen kann. Auch hat die GetMultiLineTextExtent() erstmal nichts mit irgendwelchen Events zutun. Sie fehlt einfach nur im wxWindow; zumindest ist mir bislang keine bessere Argumentation eingefallen.

    Wenn ich jetzt anfange den Quelltext zu ändern, muss ich mich bei der nächsten Version nicht wundern, dass meine Programme nichtmehr laufen, oder alles nocheinmal abändern. Ich nenne das Pfusch - wie würdest du es denn nennen?!


Anmelden zum Antworten