Toon posts:

[win32] Volgorde van tilen van windows

Pagina: 1
Acties:

Verwijderd

Topicstarter
Enig idee wat de volgorde is, waarin windows getiled worden?

Bv.: Ik heb hier een MDI met 4 windows.
Window 1 wil ik linksboven,
Window 2 naast Window 1,
Window 3 onder Window 1 en
Window 4 weer naast Window 3

Door gebruik te maken van functies als 'tile vertically' doet 'ie e.e.a. netjes zoals ik 't wil, maar dit wil ik nu beinvloeden, zodat ik altijd de windows zie zoals hierboven beschreven.

Ik heb al uitgevonden dat het laatst geselecteerde scherm, linksboven komt. Maar die andere windows lijken niet afhankelijk te zijn van de selectie volgorde.

De programmeertaal lijkt me niet echt van belang. Het is meer een windows annoyance/feature ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 05-05 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het lijkt me gewoon afhankelijk van de z-order. Als je een window selecteert wordt ie voorop geplaatst in de child list en als eerste getekend. Volgens mij loopt het tile algoritme gewoon diezelfde volgorde af.

Je kunt die volgorde aanpassen door SetWindowPos() aan te roepen, het gaat dan met name om die hWndInsertAfter parameter.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ja.. dat dacht ik namelijk ook.

Ik werk in C#, dus ik heb dit soort code:
code:
1
2
3
4
window4.Select();
window3.Select();
window2.Select();
window1.Select();


Select() zorgt ervoor dat de windows geselecteerd worden (en dus op de voorgrond komen).
(nu ik dat zeg, moet ik dat toch nog even controleren)

In ieder geval: Het volgende komt eruit:
Window1    |    Window3
-----------|-----------
Window2    |    Window4

[ Voor 4% gewijzigd door Verwijderd op 09-06-2005 11:44 . Reden: Ascii art :) ]


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Dan is de SetWindowPos van .oisyn mooier; daarbij hoeven de Windows namelijk niet geselecteerd te worden :)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 05-05 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Overigens is een verandering in z-order natuurlijk ook meteen zichtbaar, net als een SetForegroundWindow call oid. Je kunt wat dat betreft denk ik beter DeferWindowPos gebruiken, dan kun je meerdere windows herpositioneren en aan het eind alles in één keer uit laten voeren

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Heel weird, maar op een e.o.a. manier is die z-order ook niet de criteria waarop tiling werkt. Ik verwacht dat 't iets te maken heeft met een combinatie van criteria (z-order en location, ofzo). Als je direct nadat je horizontaal getiled hebt, verticaal tiled, dan zie je dat er niet veranderd. Ondanks dat de z-order anders zou moeten zijn.

Maar goed, ik heb wat zitten spelen en onderstaande brakke code werkt voor mij.

code:
1
2
3
4
5
window1.SendToBack();
window4.SendToBack();
window2.SendToBack();
window3.SendToBack();
window1.Focus();


Utterly crap, maar 't werkt wel. 8)7

In de MSDN docs staat trouwens ook weinig nuttige informatie daarover :S

Verwijderd

Topicstarter
@.Oisyn: Inderdaad, dat is nu ook het meest brakke aan m'n code. Bovenstaande link erkent dat een heeft er een oplossing voor, als ik 't goed begrijp.

In ieder geval: het nog niet zo super annoying, maar wel voor verbetering vatbaar, zoals ik 't nu zie.
Bedankt!
Pagina: 1