Avatar billede pablopablo Nybegynder
13. januar 2005 - 23:30 Der er 7 kommentarer

Mazimize event

Hejsa...

Kan i fortæller mig hvilken event som bliver fyret af når man trykker på maximerings-firkanten i formens øverste hjørne...?

Har tjekket MaximizedBoundsChanged og MaximizedSizeChanged men de reagerer ikke....? Kan ikke finde andre...men en må da der være....?

Mvh. PabloPablo
Avatar billede burningice Nybegynder
14. januar 2005 - 01:47 #1
sidst jeg skulle lave en funktion der skulle reagere på maximized endte jeg med at tjekke på den givne Windows Message. Det gøres ved at override WndProc. Der er en fyr på CodeProject der har lavet en enum med en stor del af de Messages der findes, den kan du med fordel bruge. Det erlidt nemmere end at skulle huske på numrene selv.
Avatar billede pablopablo Nybegynder
14. januar 2005 - 03:08 #2
hhmm...vil gerne tjekker det ud - har du et link?

Jeg har lavet en alternativ løsning...der bliver fyret en resize  event men problemet men det er...at formen str. allerede ér ændret når eventen bliver fanget....og det gør det hele noget mere besværligt...har fået lavet det så man kan maksimere/gendanne fra maksimeret tilstand, men når formen maksimere blive "hopper" den lidt...idet den først blive maksimere, så gendannet til normal str og så til sidste at blive maksimeret igen...:) og ind imellem foretager jeg så de nødvendige opdateringer...:)
Avatar billede kaffe Nybegynder
14. januar 2005 - 05:31 #3
kan SizeChanged og et check på WindowState ikke gøre det?
Avatar billede pablopablo Nybegynder
14. januar 2005 - 23:53 #4
neej....problemet forsvinder ikke ...det problematiske er jo...at formen strørrelse allerede ér skiftet når man fanger eventen....%-/
Avatar billede burningice Nybegynder
15. januar 2005 - 00:17 #5
peøv den her

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0005 && m.LParam.ToInt32() == 63898880 && m.WParam.ToInt32() == 2)
            {
                MessageBox.Show("Maximized");
            }

            base.WndProc (ref m);
        }
Avatar billede pablopablo Nybegynder
15. januar 2005 - 03:34 #6
Jeg har lige selv fundet den perfekte løsning :))

Jeg udregner blot left/x-koordinatet til det panel jeg vil have skal være centreres i forhold til formens totale bredde....MEGET simpelt...og det KAN ikke opdateres forkert eller noget...da det udregnes hvér gang formen resizes/i resize-eventen-metode og da den IKKE er afhænger af noget andet...det er kan at panelet er anchor'et til top,left fra start af...

den ser eller advanceret ud den metode :) hvordan virker den og hvordan skal man bruge den?
Avatar billede burningice Nybegynder
15. januar 2005 - 13:33 #7
well... kommunikation mellem programmer og windows sker som oftest på basis af Windows Messages. Det er små beskeder der flyver rundt mellem programmerne hvori der står hvad Windows gerne vil have at programmet skal gøre.

Ved at bruge Spy++ kan man hooke sig på et program og lure alle de beskeder der bliver sendt til det. Man kan altså her se, at når programmet bliver maksimeret, så bliver der sendt en helt bestemt besked, og det er så den man kan tjekke på. Ved at afbryde WndProc før at beskeden bliver sendt videre til base kan man altså ignorere beskeden.


I dette tilfælde tjekker jeg for beskeden WM_SIZE, og i WParam for hvilken type ændring det var. LParam ndeholder egentlig den nye størrelse på vinduet, så den skal nok egentlig udelades, da den kan variare alt efter hvor høj opløsning man har.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmessages/wm_size.asp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester