[WinApi] Menu animation uitschakelen

Pagina: 1
Acties:

  • Xymox
  • Registratie: Februari 2002
  • Laatst online: 19-01 13:42

Xymox

Determinism rulez !

Topicstarter
Tijdens de conversie van ons CRM pakket van NT naar XP blijkt dat de menu animatie (fade, slide etc) een behoorlijke performance-hit geeft.

De applicatie maakt gebruik van OwnerDrawn menu's, waarbij de menu's zelf programmatisch worden getekend voor een eigen look&feel.

Echter met de menu animatie komt het menu erg traag op. Aangezien snelheid van de GUI binnen de applicatie belangrijk is moet dit opgelost worden.

(De XP desktop bouwers hier vonden die XP mickey mouse instellingen prachtig en willen dit niet aanpassen. Elke gebruiker zit dus standaard met menu animaties opgescheept).

Ik heb een manier gevonden om de animaties voor een menu uit te schakelen.
Met de API functie TrackPopupMenu en de flag TPM_NOANIMATION wordt het menu inderdaad snel weergegeven.

Echter, de menuŽs hebben ook popupmenuŽs (submenus). Vreemd is dat deze popupmenus WEL geanimeerd worden weergegeven.

Voorbeeld :

=Menu1=
Item 1
Item 2
Item popup >
Item 3

Het menu 1 wordt zonder animatie weergegeven (dus 4 items).
Maar als je met de muis Item popup > selecteert dan wordt het menu daaronder wel met animatie weergegeven. Erg irritant uiteraard !

Hoe krijg ik de animatie voor het gehele menu uitgeschakeld. incl de sub popupmenu's ?

Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j


  • AlanSmithee
  • Registratie: Maart 2004
  • Laatst online: 07-07-2025
Zoals ik het lees in de documentatie moet je voor elke menu apart die TrackPopupMenu(...) gebruiken.

Dus ook voor die submenu's.

  • Xymox
  • Registratie: Februari 2002
  • Laatst online: 19-01 13:42

Xymox

Determinism rulez !

Topicstarter
Dat lijkt me vreemd, omdat je met TrackPopupMenu het menu vanaf root laat zien en de submenu's automatisch worden weergegeven wanneer je het submenu selecteert. Dus éénmalig TrackPopupMenu voor het gehele menu incl alle submenu lagen.

Of er moet een manier zijn om zodra je een popupmenu selecteert in een openstaand menu je een message krijgt waarop je een TrackPopupMenu kan doen, zodanig dat het nieuwe menu gekoppeld wordt (vastgemaakt) aan het geselecteerde item. Lijkt me onhandig en ik kan mij niet voorstellen dat de programmeurs bij microsoft hier niet iets makkelijkers voor verzonnen hebben.

Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j


Verwijderd

From the doumentation of the TrackPopupMenu() method from MSDN
For any animation to occur, the SystemParametersInfo function must set SPI_SETMENUANIMATION. Also, all the TPM_*ANIMATION flags, except TPM_NOANIMATION, are ignored if menu fade animation is on, See the SPI_GETMENUFADE flag in SystemParametersInfo.
To read more about the method :

http://msdn.microsoft.com...ctions/trackpopupmenu.asp

Enjoy!

  • Xymox
  • Registratie: Februari 2002
  • Laatst online: 19-01 13:42

Xymox

Determinism rulez !

Topicstarter
@PhiRo

Daar had ik de info ook vandaan. Inderdaad is SPI_SETMENUANIMATION ingeschakeld (door de beheerders in gebruikersprofiel). De functie SystemParametersInfo icm de SPI_Get* flags geeft inderdaad TRUE terug.

De TPM_NOANIMATION flag werkt wel, echter alleen voor het topmenu. In de MSDN docs staat niets over het wel dan niet instellen van TPM_NOANIMATION voor onderliggende submenus.

In iedergeval is nu het weergeven van het topmenu lekker snel geworden. Voor de subitems moet ik maar even verder hacken !

Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 19-05 12:05

Tomatoman

Fulltime prutser

Dit is typisch zo'n instelling die je aan de gebruiker overlaat. Analoog aan bijvoorbeeld Microsoft Office zou je de gebruikers de menu-animatie kunnen laten in- of uitschakelen. Als ze de gadgetwaarde belangrijker vinden dan de performance hit, kunnen ze de menu-animatie inschakelen en anders zetten ze menu-animatie uit.

Daarmee heb je de hele discussie tussen het ontwerpteam en jou opgelost, zonder de XP-filosofie te verlaten. Nu alleen nog even uitvinden hoe je de menu-animatie volledig kunt uitschakelen :)

Een goede grap mag vrienden kosten.

Pagina: 1