Win32 controls - Top



  • Hallo C++ Community,

    wenn ich in eine Listbox per LB_ADDSTRING ein Item hinzufüge, wird die Listbox automatisch in den Vordergrund gerückt.. z.B. befindet sich ein Label normalerweise vor der Listbox, dieses wird nach SendMessage() aber von der Listbox überdeckt.

    Kann man die Reihenfolge irgendwie festlegen, sodass die Controls sich nicht während der Laufzeit in den Vorder/Hintergrund rücken?

    Danke 😉





  • Hi schrieb:

    Auf die Schnelle http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545 (hWndInsertAfter)

    Leider gibt die Funktion bei mir immer 0 zurück:

    HWND test;
    test = GetDlgItem(hWnd, IDC_STATIC5);
    SetWindowPos(test, HWND_TOPMOST, 1, 1, 100, 100, 0x0040);

    Was mache ich da falsch?

    Gibt es auch eine Möglichkeit im Dialog schon vorm Ausführen des Programms die Topmost-Eigenschaft für ein Control festzulegen?


  • Mod

    grätsche2 schrieb:

    wenn ich in eine Listbox per LB_ADDSTRING ein Item hinzufüge, wird die Listbox automatisch in den Vordergrund gerückt.. z.B. befindet sich ein Label normalerweise vor der Listbox, dieses wird nach SendMessage() aber von der Listbox überdeckt.

    Kann man die Reihenfolge irgendwie festlegen, sodass die Controls sich nicht während der Laufzeit in den Vorder/Hintergrund rücken?

    Was ist denn das für ein Quatsch. Da wird nichts in den Vordergrund gerückt.

    Controls sind per se nicht dafür ausgestattet, dass sie sich gegenseitig überlappen. D.h. sie überschreiben sich evtl. gegenseitig. Die Z-Order wird nur eingehalten, wenn es WS_CLIPSIBLINGS im Parent gesetzt ist.
    Bei der Z-Order für Child Controls ist e sIMHO so, dass das letzte Control in der Folge oben auf liegt. Also anders herum als bei Popup Windows.

    In diesem Fall werden Controls die in der Z-Order
    Was macht es bitte für einen Sinn ein Static Control über eine Listbox zu legen?

    PS: Ist wie immer in der MSDN perfekt dokumentiert:
    http://msdn.microsoft.com/en-us/library/czada357(v=vs.80).aspx



  • Martin Richter schrieb:

    Was macht es bitte für einen Sinn ein Static Control über eine Listbox zu legen?

    Sorry für die späte Antwort..

    Der Hauptgrund ist eigentlich nur weil ich in meiner Dialogbox platzsparen will 😃 (siehe Bild)

    Leider versteh ich es noch immer nicht so ganz, wenn ich jetzt WS_CLIPSIBLINGS auf True in der Form setzte, schiebt sich die Listbox bei LB_ADDSTRING noch immer vor die Labels / Text Controls.. 😕

    PS: ich benutze den Form-Designer von Visual Studio falls das hilft 😉

    Link zum Bild von meinem Dialog: http://imageshack.us/photo/my-images/850/unbenanntwz.jpg/


  • Mod

    Dann musst Du die Controls eben entsprechend in die Reihenfolge bringen.

    Ich sehe nicht wo dies Platz spart, außer dass es den Anwender verwirrt.



  • Martin Richter schrieb:

    Dann musst Du die Controls eben entsprechend in die Reihenfolge bringen.

    Ich sehe nicht wo dies Platz spart, außer dass es den Anwender verwirrt.

    Die Labels sollten nur eine bestimmte Anzahl einer Variable anzeigen, und die Listbox dient quasi als Debug-Anzeige und ist nicht zum anwählen / scrollen usw. gedacht.

    Ist die im Bild zu sehende Reihenfolge nicht korrekt?

    Leider finde ich bei den Eigenschaften der Controls im Formdesigner keinen Wert der irgendetwas mit der Reihenfolge zu tun hätte. 😕


  • Mod

    Form Designer?
    Du meinst den Ressourcen-Editor.

    Strg+D drücken und Du kanst Die Reihenfolge verändern.


Anmelden zum Antworten