windows - Klasse stilarter i WNDCLASS, hvad refererer det til? Win32

Indlæg af Hanne Mølgaard Plasc

Problem



hvad betyder det klassestil egentlig? det forvirrede mig. Dette er fra MSDN: stil
Angiver klassestil (erne). Dette medlem kan være en hvilken som helst kombination af klassestile.



typedef struct \_WNDCLASS { 
    UINT       style; 
    WNDPROC    lpfnWndProc; 
    int        cbClsExtra; 
    int        cbWndExtra; 
    HINSTANCE  hInstance; 
    HICON      hIcon; 
    HCURSOR    hCursor; 
    HBRUSH     hbrBackground; 
    LPCTSTR    lpszMenuName; 
    LPCTSTR    lpszClassName; 
} WNDCLASS, *PWNDCLASS; 

Bedste reference


Klassestilstanderne er egenskaber, der påvirker hver forekomst i et vindue i den pågældende klasse. For at afklare, lad os sammenligne vinduesinstansegenskaber vs klassegenskaber nedenfor. Angiv at du opretter en ny Windows-klasse kaldet MyCoolControl, og du opretter flere forekomster af dette:



  • Hver instans har sin egen placering, vinduet tekst og aktiveret og synlig tilstand - disse er vindue instans egenskaber, og du kan indstille disse på et vindue uafhængigt af de andre.

  • Men alle forekomster af denne kontrol vil dele den samme WndProc som angivet i WNDCLASS, som du bruger til at oprette klassen. De har også de samme klassegenskaber, f.eks. Om vinduerne modtager dobbeltkliksmeddelelser frem for to separate klikbeskeder (CS\_DBLCLKS klasseformatbit), eller om vinduet er fuldstændigt genopbygget, når det ændres (CS\_HREDRAW, CS\_VREDRAW), eller om vinduerne har en drop-shadow (CS\_DROPSHADOW). Den fulde liste over klassestile er angivet på MSDN her .



Så hvis du f.eks. Vil have et vindue til at have en grænse eller ej, så er der en 'window style bit' (WS\_BORDER), og du angiver det som en vinduestilstandsværdi i CreateWindow (eller kan ændre det senere pr. Vindue med SetWindowLongPtr ( GWL\_STYLE)), og kun det pågældende vindue er berørt. Men hvis du vil oprette et vindue med en dropshadow, angiver du det i stilmedlemmet af WNDCLASS, og det påvirker alle forekomster af den pågældende klasse.


(Der er nogle undtagelser herfor - WndProc specificeret i WNDCLASS er virkelig standard wndproc for den klasse af Windows, du kan faktisk tilsidesætte den per-instans, hvis du vil. Men det store billede er stadig stort set det samme: WNDCLASS og CS\_-stilarter er indstillinger overalt, mens WS\_-ene og parametrene til CreateWindow er specifikke for det ene vindue.)