Avatar billede akilleuz Nybegynder
08. april 2010 - 13:08 Der er 6 kommentarer og
1 løsning

Forklaring af simpel kode

Hej

Jeg har noget C# kode som egentlig fungere men vil gerne have lidt forklaring på hvorfor :)


private static int WM_QUERYENDSESSION = 0x11;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg==WM_QUERYENDSESSION)
    {
      MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
    }
    // If this is WM_QUERYENDSESSION, the closing event should be
    // raised in the base WndProc.
    base.WndProc(ref m);
} //WndProc

Det programmet gør er at lave en MSG-Box lige så snart PC'en er ved at logge af, reboote eller lukke ned.



Det jeg ikke forstår er følgende:

private static int WM_QUERYENDSESSION = 0x11; Hvorfor 0x11?



Og følgende funktion
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    base.WndProc(ref m);
} //WndProc

Jeg kender ikke til WndProc, og har ikke brugt det før, hvad gør ovenstående?



Det jeg skal bruge koden til er at sende en string på en RS232 når PC'en gør en af ovenstående event. Denne kode har jeg dog styr på :)
Avatar billede arne_v Ekspert
08. april 2010 - 15:15 #1
Det der er reelt Win32 API (native kode).

winuser.h indeholder:

#define WM_QUERYENDSESSION 17

og 0x11 er 17.

WndProc er den funktion som haandterer messages til et vindue.

Du kan enten bare konstatere at det er noget native C/C++ noget som du ikke gider saette dig ind i.

Eller saa skal du igang med at laere C/C++ og Win32 API.

Et godt sted at starte er her:

http://www.winprog.org/tutorial/
Avatar billede akilleuz Nybegynder
08. april 2010 - 16:07 #2
Jeg er godt klar over at 0x11 er 17 men hvorfor skal den være det?

Jeg er også klar over det er native kode, men kan du fortælle mig hvad protected override..... Gør? Henter den besked/eventet fra Windows?
Avatar billede arne_v Ekspert
08. april 2010 - 16:12 #3
Den skal vaere 17 fordi dem .h fil som windows er compilet med har den vaerdi.
Avatar billede arne_v Ekspert
08. april 2010 - 16:13 #4
protected og override er standard C# keyword

protected = visible til denne klasse og til subklasser af denne klasse

override = overrider en metode med samme signatur i superklasse
Avatar billede akilleuz Nybegynder
08. april 2010 - 21:04 #5
Tak for din tålmodighed, men jeg tænkte på hele linjen:

protected override void WndProc(ref System.Windows.Forms.Message m)

Hvad den gør, er ikke så sikker på det inde i parantensen.

Hvis du kan beskrive det i et svar så er der points på vej.

Tak for hjælpen!
Avatar billede arne_v Ekspert
08. april 2010 - 21:07 #6
protected = kun adgang fra klassen selv og subklasser
override = overider metode i super klasse
void = returnerer ingenting
WndProc = navn paa metode
(
ref = argument sendt over "by reference" og ikke "by value" som er default
System.Windows.Forms.Message m = argument af typen Message
)
Avatar billede arne_v Ekspert
13. juni 2010 - 04:52 #7
all set?
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