[win32/c++] verbergen/zichtbaar maken multiple child-windows

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • rashmatash
  • Registratie: Maart 2002
  • Laatst online: 10-07 11:52
Hallo,

Weet iemand hoe een aantal child-windows (buttons, checkboxes, etc.) met gezamelijk dezelfde parent-window tegelijk verborgen/zichtbaar gemaakt kan worden?

Ik heb een main window met tabblaadjes en als ik een van pagina wissel, dan moeten alle knopjes op die pagina 1 voor 1 onzichtbaar gemaakt worden en die van de nieuwe pagina 1 voor 1 zichtbaar gemaakt worden (met ShowWindow(...)). Is er niet een meer elegante manier om dit te doen? Google laat 't deze keer beetje afweten...

[RashMatash]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gooi alles op een panel en maak 't panel invisible :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • rashmatash
  • Registratie: Maart 2002
  • Laatst online: 10-07 11:52
ok ik is best wel een beginner met win32. wat is een panel en hoe moet ik er voor zorgen dat de messages wel door komen naar de main window's window procedure?

[RashMatash]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
rashmatash schreef op woensdag 02 november 2011 @ 11:58:
ok ik is best wel een beginner met win32. wat is een panel
Je mag dan wel een beginner zijn (prima; zo zijn we allemaal ooit begonnen) maar kom op zeg: [google=c++ panel]. Een panel is niets meer dan een container waar je controls in mikkert. Een alternatief is een groupbox; die heeft ook een 'titel' en is visueel zichtbaar(der).

/edit: iemand anders zei 't mooier:
Apart from the appearance, Panel is Scrollable whereas GroupBox isn't, and GroupBox has a caption, whereas a Panel doesn't.
Als je met MFC bezig bent kijk dan eens hier bijvoorbeeld (een panel is in MFC gewoon een 'window').

[ Voor 52% gewijzigd door RobIII op 02-11-2011 12:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • rashmatash
  • Registratie: Maart 2002
  • Laatst online: 10-07 11:52
Rob, bedankt. Dat had ik wel geprobeerd. Ik had een groupbox aangemaakt als parent voor alle knopjes op een pagina en het werkte:

hwndmain = createwindow( mainwindow );
hwndgrpbox = creatwindow( grpbox met hwndmain als parent )
hwndbutton = creatwindow( button met hwndgrpbox als paren )

showwindow( hwndgrpbox, WS_HIDE/WS_SHOW );

moet dat ongeveer zo? Alleen dan komen de messages van de knopjes niet meer door naar mijn windowproc.

[RashMatash]


Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 21-09 13:26

Dricus

ils sont fous, ces tweakers

Laat anders even wat relevante echte sourcecode zien, geen pseudocode. Het kan namelijk inderdaad zo zijn dat messages van het hwndgrpbox window niet in de windowproc van je hwndmain terechtkomen. Dit kan te maken hebben met de window class die je gebruikt.

Als de windowproc die geassocieerd is met hwndgrpbox zijn messages niet doorstuurt naar zijn parent window, dan klopt het inderdaad dat die messages niet aankomen bij je hwndmain window.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik kan me geen slechtere zoekterm voorstellen dan "C++ panel". Afgezien van "naveltruitje" oid. C++ is een taal dat niets met GUI's doet, en je bent dus afhankelijk van 3rd party API's. En daar zijn er nogal veel van: Qt, MFC, wxWidgets, etc. Aangezien het hier om win32 gaat, is dát dus het relevante sleutelwoord. Maar win32 kent geen panels, je moet gewoon werken met child windows. Specifiek met static controls.

[ Voor 10% gewijzigd door .oisyn op 02-11-2011 18:02 ]

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.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
.oisyn schreef op woensdag 02 november 2011 @ 17:34:
[...]

Ik kan me geen slechtere zoekterm voorstellen dan "C++ panel". Afgezien van "naveltruitje" oid.
:D
Ik beperkte mijn search tot de zoektermen die TS in dit topic al gebruikte en zélfs daarmee kreeg ik als eerste hit relevante informatie; dat C++ niet erg relevant is ben ik me van bewust.
.oisyn schreef op woensdag 02 november 2011 @ 17:34:
Maar win32 kent geen panels, je moet gewoon werken met child windows. Specifiek met static controls.
Vandaar ook dat ik een eerste aanzet gaf (waarbij ik even uit ging van MFC):
RobIII schreef op woensdag 02 november 2011 @ 12:00:
Als je met MFC bezig bent kijk dan eens hier bijvoorbeeld (een panel is in MFC gewoon een 'window').

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • ytterx
  • Registratie: Januari 2009
  • Laatst online: 19-09 18:18
probeer dit eens:

MSDN: DeferWindowPos function

met de vlag SWP_HIDEWINDOW

Acties:
  • 0 Henk 'm!

  • rashmatash
  • Registratie: Maart 2002
  • Laatst online: 10-07 11:52
Ja! die had ik ook gezien, maar hoe doe ik nou enkele windows tegelijk? schijnt dat je hiermee een array van windows kunt aanpassen, maar uit de beschrijving in msdn is 't niet echt duidelijk hoe...

[RashMatash]


Acties:
  • 0 Henk 'm!

  • ytterx
  • Registratie: Januari 2009
  • Laatst online: 19-09 18:18
C++:
1
2
3
4
5
6
7
8
9
10
HDWP deferWindowPosHandle = BeginDeferWindowPos(numberOfWindowsToEffect);

// Herhaal het volgende voor elke "window"
if (deferWindowPosHandle != 0)
{
    deferWindowPosHandle = DeferWindowPos(deferWindowPosHandle, handleOfWindow, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_HIDEWINDOW);
}
// einde herhaling

EndDeferWindowPos(deferWindowPosHandle);


Had je kunnen opmaken of zoeken op google.. (doe dit al een paar weken bij een prolect van me.

Acties:
  • 0 Henk 'm!

  • rashmatash
  • Registratie: Maart 2002
  • Laatst online: 10-07 11:52
Ok, Bedankt! ik heb inderdaad een for-loop gemaakt om alle windows 1 voor 1 aan of uit zetten met ShowWindow().

[RashMatash]

Pagina: 1