Scrollbar wie???



  • Hallo,

    ich habe ein Dialogfeld
    IDD_SEGMENT DIALOG DISCARDABLE 0, 0, 153, 476
    STYLE WS_CHILD

    auf dem sich jede Menge Controls befinden (buttons, sliders und comboboxes).
    Mein Problem ist, dass alle Controls nur ab einer bestimmten Bildschirmauflöung
    zu sehen sind, die mein Laptop aber leider nicht hat.

    Jetzt möchte ich zu dem Dialogfeld eine Scrollbar hinzufügen, mit
    der ich es erreichen kann, dass der Anwender am Dialogfeld herunterscrollen kann, um auch die unsichtbaren Buttons anclicken zu können.

    Ich bekomme es zwar hin, die Scrollbar rein optisch hinzuzufügen, aber ich weiß nicht wie ich die Funktionalität (geänderter Viewport) hinbekomme!!!

    Wäre schön, wenn mir dabei jemand helfen könnte (am besten vielleicht
    mit einem passenden Codebeispiel).

    Viele Grüße,
    Markus



  • Hmm, noch keine Antworten!!!

    Ist die Frage vielleicht zu kompliziert,
    oder isses so einfach dass keiner Lust hat drauf zu antworten?



  • Gibt keine Scrollmoeglichkeit von Dialogboxen.

    Wenn Du sowas willst, kannst Du nicht die Dialog-Boxen von Windows benutzen. Dann musst Du ein normales Fenster aufmachen.

    Schau Dir mal die Libraries wxWindows, GTK+ und Qt an. (siehe Google)

    (EDIT: oder die Tk-Library von Tcl/Tk bzw. Perl/Tk)

    (EDIT II: Der Grund dafuer, dass es nicht geht, den "ViewPort" in einer Dialog-Box zu aendern, ist, dass Controls aus Dialogschablonen sich nicht in Position und Groesse nachtraeglich aendern lassen, das fuehrt meiner Erfahrung nach zu einem Absturz. Hab's aber schon lange nicht mehr ausprobiert. Behandel mal die Nachrichten WM_HSCROLL und WM_VSCROLL, und versuch mal die Position eines Controls zu veraendern z.B. mit MoveWindow( GetDlgItem( hwnd, id ), x, y, w, h, TRUE ); )



  • Du machst am besten eine variable sy, die größer wird sobald man den scrollbalken noch unten zieht. die position der sachen, die dann gescrollt werden sollen ist dann halt z.b. 100 - sy

    Den Code kann ich dir jetzt nicht machen, weil ich keine ahnung von dialogblablas habe...



  • dass Controls aus Dialogschablonen sich nicht in Position und Groesse nachtraeglich aendern lassen

    lol. das stürzt nie im leben am wenn du MoveWindow auf Dialog Controls benutzt.



  • @ Power off und die anderen Verfasser von Beiträgen:

    Das Problem ist, dass ich leider keine Bibliotheken verwenden kann,.
    da das Ganze Teil meiner Diplomarbeit ist und auf einem
    umfangreicheren C - Programm aufsetzt.

    Scrollbars werden da aus irgendeinem Grund wegen dem Message - Handling
    nicht verwendet, ich würde es aber doch gerne so machen.

    Irgendwie muß das doch gehen, schließlich kann ich das Feld ja im Resource Editor
    in den Eigenschaften bei Styles mit Scrollbars ausstatten.

    Das wäre doch sicher deaktiviert, wenn es keinen Sinn machen würde!!!

    Gruß,
    Markus



  • vorschlag:
    zweites fenster als child vom dialog das als container für alle ctrls dient
    dieses dann immmer mittels movewindow entsprechend verschieben.
    oder wie schon vorgeschlagen alle controls mittels movewindow verschieben



  • Ok,

    ich werde das mit dem Verschieben mal ausprobieren.

    Vielen Dank für die Tips.

    Gruß,
    markus



  • Ich stehe vor genau dem selben problem, nur dass ich eMbedded Visual C++ zur PocketPC Programmierung benutze. Wie kann ich meine Controls in so einen Container packen, den ich dann mittels MoveWindow verschieben kann?

    kann man einen Dialog vielleicht scrollen, wenn er einen anderen style hat (also popup oder overlapped anstatt child)

    danke für eure antworten

    mfg, TFTS



  • wurde doch schon beschrieben. wo genau ist dein problem?



  • Power Off schrieb:

    (EDIT II: Der Grund dafuer, dass es nicht geht, den "ViewPort" in einer Dialog-Box zu aendern, ist, dass Controls aus Dialogschablonen sich nicht in Position und Groesse nachtraeglich aendern lassen, das fuehrt meiner Erfahrung nach zu einem Absturz. Hab's aber schon lange nicht mehr ausprobiert. Behandel mal die Nachrichten WM_HSCROLL und WM_VSCROLL, und versuch mal die Position eines Controls zu veraendern z.B. mit MoveWindow( GetDlgItem( hwnd, id ), x, y, w, h, TRUE ); )

    Ich habe selten so viel Schwachsinn und Unfug in einem einzigen Posting gelesen. Mann, hab ich gelacht. Hat meinen Tag gerettet. Danke!



  • mein problem: wie erzeug ich so einen container und wie sag ich dem container dann, dass er bei einem scrollbar klick sich nach oben bzw. unten bewegt

    mfg, TFTS



  • der container ist nichts anderes wie ein ganz normaler dialog der ein child von deinem dialog ist und den "container" bewegst du mit movewindow



  • soweit so klar ... aber wie fange ich das event ab wenn ich auf der scrollbar rumklicke





  • vielen dank ... jetz hab ich noch ein letztes problem. Wenn ich mein child dialog nach oben schiebe verdeckt er das hauptfenster ... wie kann ich dafür sorgen, dass der child dialog hinter dem hauptfenster liegt ... also so eine art Hauptfenster->SetForegroundWindow()



  • Versuch es mal mit SetWindowPos über hWndInsertAfter.


Log in to reply